Jersey REST GET 正在工作,但 PUT 没有。请求的资源不允许指定的 HTTP 方法
Posted
技术标签:
【中文标题】Jersey REST GET 正在工作,但 PUT 没有。请求的资源不允许指定的 HTTP 方法【英文标题】:Jersey REST GET is working but PUT not. The specified HTTP method is not allowed for the requested resource 【发布时间】:2018-02-24 09:25:00 【问题描述】:这几天我一直在为此烦恼。这个小片段运行良好(在 Tomcat 上使用 Jersey 2.26-b03)。
@GET
@Path("/code")
public Response update(@PathParam("code") String code)
System.out.println("!!!!!!!");
return Response.status(Response.Status.OK).build();
curl -i -X GET http://localhost:18270/nyx/rest/servervirtueel/SVM0000
HTTP/1.1 200 OK
接下来是我启用的一堆泽西岛追踪。但是如果我只把GET改成PUT(完全一样的方法,只改注解):
@PUT
@Path("/code")
public Response update(@PathParam("code") String code)
System.out.println("!!!!!!!");
return Response.status(Response.Status.OK).build();
curl -i -X PUT http://localhost:18270/nyx/rest/servervirtueel/SVM0000
HTTP/1.1 405 Method Not Allowed
随后 html 告诉我“所请求的资源不允许使用指定的 HTTP 方法”。但是,POST 确实有效(再次更改注释)。
【问题讨论】:
我希望您在更改@PUT
注释并将其部署到tomcat 后重新编译代码!对我来说,它与 jersey 2.26
在 tomcat 8.5.11
上配合得很好。
是的,我同意您提供的信息无法重现这一点。
当然,已经上千次了。当然,在那之后将其更改为 POST,所以我知道我在做什么。我正在使用 Tomcat 7.0.75。但我更进一步,编写了一个覆盖 doGet doPut doPost 和 doDelete 的普通 servlet。还有 PUT 和 DELETE 不起作用,其他的都不起作用。所以它似乎是Tomcat的事情,而不是泽西岛。但是设置 readonly 和 web-resource-collection 的 http-method 并不能解决它。目前这就是我所拥有的所有信息,我希望我知道的比我所看到的更多。
只是在黑暗中拍摄,但请尝试发送尸体。
【参考方案1】:
原来OWASP方法白名单阀门是在Tomcat(Catalina)级别配置的,只允许GET和POST;这是一个到目前为止只保存 SOAP 服务的 web 应用程序。您在 web.xml 或 server.xml 中都看不到它,但它在 Catalina/localhost/webappname.xml 中。
【讨论】:
以上是关于Jersey REST GET 正在工作,但 PUT 没有。请求的资源不允许指定的 HTTP 方法的主要内容,如果未能解决你的问题,请参考以下文章
Jersey REST (GET) throwing MessageBodyWriter not found for media type=application/xml