我的开发中存在API Restfull后端(jersey jpa)和前端(angular 5)的问题,因为当我执行应用程序的更新操作时,我以前从未遇到过这个问题,所以我无法明白这一点。代码在这里
title: LangueRest.java
package com.spro.rest;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import com.spro.dao.DaoFactory;
import com.spro.entity.Langue;
import com.spro.jpa.JpaLangueDao;
@Path("/langue")
public class LangueRest {
private JpaLangueDao langueDao;
public LangueRest() {
this.langueDao = DaoFactory.getInstance().getLangueDao();
}
@Path("/getall")
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Langue> getAll(){
return langueDao.findAll();
}
@Path("/{id}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Langue getById(@PathParam("id") long id){
return langueDao.findById(id).get(0);
}
@Path("/add")
@POST
@Consumes(MediaType.APPLICATION_JSON)
public void add(Langue langue) {
langueDao.add(langue);
}
@Path("/update")
@PUT
@Consumes(MediaType.APPLICATION_JSON)
public void update(Langue langue) {
langueDao.update(langue);
}
@Path("/delete")
@
@Consumes(MediaType.APPLICATION_JSON)
public void delete(Langue langue) {
langueDao.delete(langue);
}
}
langue.service.ts
import { Langue } from './langue';
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import {Observable} from 'rxjs';
import 'rxjs/add/operator/map';
const httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json'})
};
@Injectable()
export class LangueService {
constructor(private http: HttpClient) {}
// lister toutes les Langues
getLangues() {
return this.http.get('http://localhost:8081/APIRest/resources/langue/getall');
}
// créer un enregistrement langue
createLangue(langue:Langue) {
return this.http.post('http://localhost:8081/APIRest/resources/langue/add', JSON.stringify(langue), httpOptions);
}
// modifier une langue
updateLangue(langue:Langue) {
alert("sssssss "+ httpOptions);
return this.http.put('http://localhost:8081/APIRest/resources/langue/update' + langue.langueId, JSON.stringify(langue), httpOptions);
}
// supprimer une langue
deleteLangue(langue:Langue) {
return this.http.delete('http://localhost:8081/APIRest/resources/langue/delete/'+ langue.langueId);
}
}
错误是:
PUT http://localhost:8081/APIRest/resources/langue/update3092 405(非 允许的方法)
答案 0 :(得分:0)
了解如何构建URL。你甚至不会在“更新”之间删掉斜线。和身份证。所以你需要解决这个问题。您收到的是405,因为路径@Path("{id}")
,其中update3092
被视为ID。
使用客户端修复此问题后,您将获得404.如果要发送id路径参数,您需要的是可以处理@Path("update/{id}")
的端点
@Path("/update/{id}")
@PUT
@Consumes(MediaType.APPLICATION_JSON)
public void update(@PathParam("id") long id, Langue langue) {
Language inStore = langueDao.findById(id);
if (inStore == null) {
throw new NotFoundException();
}
langueDao.update(langue);
}
添加此端点后,您可能仍会遇到CORS问题。如果您这样做,请参阅this post