我正在开发一个Spring REST / Backbone应用程序。
虽然GET工作得很好,但我在使用PUT时遇到了麻烦(可能和DELETE一样)。
我的Spring控制器有以下方法:
@RequestMapping(value="/{id}", method = RequestMethod.PUT)
public void putItem( @PathVariable("id") String id, @RequestBody Item item) {...}
但是当我尝试保存Backbone模型时,我收到以下错误:
405 (HTTP method PUT is not supported by this URL)
GET映射在同一个控制器类中,并使用相同的url注释(类级别)。
我的注释是否正确?我正在使用Jetty服务器,我是否需要以某种方式配置它以允许PUT请求?
编辑:
假设这是Jetty配置问题,我将以下内容添加到webdefault.xml
<web-resource-collection>
<url-pattern>*.do</url-pattern>
<http-method>GET</http-method>
<http-method>HEAD</http-method>
<http-method>PUT</http-method>
<http-method>POST</http-method>
</web-resource-collection>
在<security-constraint>
定义中。它的效果是现在GET方法返回403(Forbidden) - 所以就好像这个定义确实只会限制安全性而不是让它更自由的手段。我也尝试删除GET和PUT行,但它对我的原始405错误没有影响(当然它确实让GET再次工作)
答案 0 :(得分:1)
您需要确保在服务器上启用了GET POST PUT和DELETE谓词。您的问题不是客户端,因此如果您有权访问服务器设置,请确保启用上述谓词。我不熟悉jetty,但它看起来好像不支持开箱即用,并且需要某种自己的处理程序。这是我在快速搜索后找到的资源 - &gt; JETTY - PUT DELETE
答案 1 :(得分:0)
我终于发现问题是* .do模式。
Backbone在路径变量之前添加.do,因此它不起作用。我完全摆脱了后缀,现在它可以工作了!