如何在Jetty中启用PUT方法?

时间:2012-06-20 11:46:52

标签: spring-mvc backbone.js jetty

我正在开发一个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再次工作)

2 个答案:

答案 0 :(得分:1)

您需要确保在服务器上启用了GET POST PUT和DELETE谓词。您的问题不是客户端,因此如果您有权访问服务器设置,请确保启用上述谓词。我不熟悉jetty,但它看起来好像不支持开箱即用,并且需要某种自己的处理程序。这是我在快速搜索后找到的资源 - &gt; JETTY - PUT DELETE

答案 1 :(得分:0)

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

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