2012-06-20 48 views
1

我正在研究Spring REST/Backbone应用程序。如何在Jetty中启用PUT方法?

尽管GET的工作很好,但我在PUT上遇到了问题(并且可能与DELETE相同)。

我的春天控制器有以下方法:

@RequestMapping(value="/{id}", method = RequestMethod.PUT) 
public void putItem(@PathVariable("id") String id, @RequestBody Item item) {...} 

但是,当我尝试保存骨干模型,我得到以下错误:

405 (HTTP method PUT is not supported by this URL) 

的GET映射是在同一个控制器类并使用相同的URL注释(类级别)。

我的注释是否正确?我使用Jetty作为服务器,我需要配置它以某种方式允许PUT请求?

编辑:

假设这是一个码头配置问题,我增加了以下内容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(禁止) - 所以这就好像这个定义确实只会限制安全性,并不是使它更加自由的手段。我也尝试删除GET和PUT行,但它对我的原始405错误没有影响(当然它确实使GET再次工作)

回答

1

您需要确保在服务器上启用GET POST PUT和DELETE动词。您的问题不是客户端,所以如果您有权访问服务器设置,请确保上述动词已启用。我对jetty并不熟悉,但它看起来好像并不支持开箱即用,并且需要某种自己的处理程序。这里是我进行快速搜索后发现的资源 - >JETTY - PUT DELETE

0

我终于发现问题是* .do模式。

Backbone在路径变量之前添加了.do,因此它不起作用。我完全摆脱了后缀,现在它的工作原理!

+0

骨干为什么会添加一个.do到任何东西?看起来像一些习惯 –