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

时间:2012-07-18 22:03:08

标签: java tomcat jersey jax-ws

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

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

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

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

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

5 个答案:

答案 0 :(得分:11)

感谢您的建议。它最终让我愚蠢地为我的球衣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>

答案 1 :(得分:4)

注释类而不是方法:

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

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

}

我不知道为什么,但它也给我带来了另一种问题

答案 2 :(得分: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})

答案 3 :(得分:0)

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

答案 4 :(得分:-5)

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

尝试添加&#34; / rest&#34;到路径,如http://localhost:8080/rest/mypath/myendpoint