2

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

4

2 回答 2

1

You need to make sure that GET POST PUT and DELETE verbs are enabled on the server. Your problem is not client side, so if you have access to server settings just make sure the above verbs are enabled. I am not familiar with jetty, but it looks as though it is not supported out of the box and would require some sort of your own handler. Here is the resource that I found after doing a quick search -> JETTY - PUT DELETE

于 2012-06-20T12:37:12.427 回答
0

我终于发现问题出在 *.do 模式上。

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

于 2012-06-20T18:51:05.260 回答