Jersey 返回 HTTP 状态 405 - 不允许的方法

Posted

技术标签:

【中文标题】Jersey 返回 HTTP 状态 405 - 不允许的方法【英文标题】:Jersey returns HTTP Status 405 - Method Not Allowed 【发布时间】:2012-07-18 01:25:12 【问题描述】:

我有一个使用 Jersey 的非常简单的端点。我的 URL 是静态的,它不需要任何请求参数。它看起来像这样:

@GET
@Path("/mydata")
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)  
public String getData()  
  return "'name': 'value'";

但是,每当我请求此 URL 时,我总是会收到 HTTP 状态代码 405 - 方法不允许。

奇怪的是,如果我更改 @Path 注释并定义一个路径变量,例如@Path("/chart/blah") 工作正常。

有谁知道为什么我必须定义一个路径变量才能让它工作?我不需要路径变量,添加一个只是为了获得 200 响应似乎很愚蠢。

【问题讨论】:

您如何请求 URL?例如- 发布您尝试使用的实际 URL。 我使用的网址是:localhost:8080/mydata 【参考方案1】:

感谢您的建议。结果是我愚蠢地为我的球衣 SpringServlet 输入了不正确的 url 模式。是/ 而不是/*

<servlet>
   <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
</servlet>

<url-pattern>/*</url-pattern>

<servlet-mapping>
   <servlet-name>Chart Service</servlet-name>
   <url-pattern>/*</url-pattern>
</servlet-mapping>

【讨论】:

【参考方案2】:

注释类而不是方法:

@Path("/mydata")
public class MyClass()

@GET
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)  
public String getData()  
  return "'name': 'value'";



我不知道为什么,但反过来也给我带来了麻烦

【讨论】:

【参考方案3】:

我想可能是因为你指定了

@Produces(MediaType.APPLICATION_JSON).

1) 也许您应该尝试在终端中运行以下命令

curl -i -X GET -H 'Accept:application/json' http://localhost:8080/mydata

2) 或尝试更改为

@Produces(MediaType.APPLICATION_JSON, MediaType.TEXT_html)

【讨论】:

感谢您的建议,不幸的是,这两种方法仍然导致返回 405。 @seedhead 抱歉,你能再试试方法 1 吗?我意识到我复制并粘贴了错误的标题【参考方案4】:

此类问题的另一个可能来源:要非常注意所有参数和注释。我遇到了这样的问题,当我用 POST 调用一个方法时,它被 @PUT 注释了

【讨论】:

【参考方案5】:

我遇到了同样的问题; http://localhost:8080/mypath/myendpoint 不工作。

尝试在路径中添加“/rest”,如http://localhost:8080/rest/mypath/myendpoint

【讨论】:

以上是关于Jersey 返回 HTTP 状态 405 - 不允许的方法的主要内容,如果未能解决你的问题,请参考以下文章

jersey rest post 访问为http 405 异常如何解决

Spring Boot POST 请求返回 http 状态 405“方法不允许”而不是 HTTP 状态 404

WebApi Post 方法总是返回“请求的资源不支持 http 方法 'GET'。”状态:405 方法不允许

在带有 HTTP 状态代码 405 的 REST API 中返回啥错误消息?

Spring MVC HTTP 状态 405 - 不支持请求方法“POST”

从 Jersey REST 客户端调用时出现 405 错误代码