我的开发中出现错误405

时间:2018-05-31 10:43:31

标签: angular jersey

我的开发中存在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(非   允许的方法)

1 个答案:

答案 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