Java 405–;方法不允许与@DELETE一起使用

Java 405–;方法不允许与@DELETE一起使用,java,rest,jersey,jax-rs,Java,Rest,Jersey,Jax Rs,我正在使用Jersey开发(Maven项目)REST with Java(JAX-RS)。我正试图根据传递的id删除模块 @DELETE @Path("delete/{id}") @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) public Module deleteModuleById(@PathParam("id") Long id) {

我正在使用Jersey开发(Maven项目)REST with Java(JAX-RS)。我正试图根据传递的id删除模块

@DELETE
@Path("delete/{id}")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public Module deleteModuleById(@PathParam("id") Long id) {
    return repository.delete(id);
}
我从tomcat服务器得到了405-methodnot-allowed,不确定我做错了什么

这是删除方法:

public Module delete(long id) {
    EntityManager em = EM_FACTORY.createEntityManager();
    em.getTransaction().begin();
    Module m = em.find(Module.class, id);
    if (m != null) {
        em.remove(m);
    } else {
        throw new IllegalArgumentException("Provided id " + id + " does not exist!");
    }
    em.getTransaction().commit();
    em.close();
    return m;
}
所有模块的邮递员请求: id为1的删除模块的邮递员请求:

项目结构:
您的代码似乎正常。检查您的发送方式。请考虑IllegalArgumentException可能会导致500服务器错误

通过卷曲检查

curl -X DELETE <YOUR HOST>/delete/123
curl-X DELETE/DELETE/123

或者通过任何外部资源(如,邮递员等)进行检查。

由于您的代码似乎很好,而且您还没有添加邮递员请求,我认为您可能在请求中设置了错误的方法类型。如下图所示设置请求:

请将
base\u url
您的\u id
替换为您的实际值
N.B:检查我在URL左侧设置的
DELETE
方法@Consumes({MediaType.APPLICATION\u JSON})

Postman会根据请求正文的设置自动附加
内容类型
标题。 您的请求设置为HTML,而不是JSON。
它应该给出一个不同的错误,但这应该在这里引起一个问题。

405方法不允许
例如,在方法为
GET
时尝试
POST
时发生


在邮递员请求中,我没有看到您将参数
id
。因此,您正在进行的调用看起来像
/api/modules/delete
,而它应该是
/api/modules/delete/1
。如果有像
api/modules/{x}
这样的方法,它将调用此方法,最终创建
405

405-当您向端点发送错误类型的请求时,将出现不允许的方法。您使用什么工具向该端点发送请求?我使用Postman@Rody,向我们展示邮递员reequestIn除了@BarHoshen,在邮递员请求中,我不想你把参数
id
@Rody,它说错误是
500
不是,
405
!如果可能的话,请添加哪个问题是针对哪个请求的,以及相关日志。事实上,我正在做与您解释的相同的事情,我编辑了问题,我添加了邮递员requests@Rody也可能是您弄错了路径。您能告诉我您在哪里设置了“api”和“模块”路径吗?我设置了,但我不认为路径有问题,因为我可以创建一个新的模块,而不需要设置任何路径problems@Rody,上次删除请求返回500-内部服务器错误。这意味着请求被控制器捕获。可能是您的IllegalArgumentException被抛出了。您可以使用临时注释“throw”检查结果是否为“OK”(200)是的,谢谢,但实际上问题是我试图删除的模块引用了另一个表中的FK键,因此我无法删除它