20

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

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

但是,每当我请求此 URL 时,我总是会收到一个 HTTP 状态代码 405 - Method Not Allowed。

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

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

4

5 回答 5

12

感谢您的建议。结果是我愚蠢地为我的球衣 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>
于 2012-07-19T09:37:35.673 回答
6

注释类而不是方法:

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

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

}

我不知道为什么,但它也给我带来了其他问题

于 2012-07-19T09:04:51.550 回答
4

我想这可能是因为你指定

@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})
于 2012-07-19T07:47:10.910 回答
4

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

于 2018-05-04T05:31:32.577 回答
-7

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

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

于 2015-05-18T16:57:07.783 回答