SpringMVC:将表单中的方法指定为DELETE的问题

时间:2012-08-14 07:58:03

标签: html html5 spring spring-mvc

我正在尝试删除服务器上的资源,并希望通过我网页上的普通链接执行此操作。

据我所知,点击链接时我们无法向服务器发送DELETE请求,因此我尝试使用

解决此问题
<form id="aux_form" action="environment/">
   <input type="hidden" name="_method" value="delete">
   <input type="hidden" name="id" value="${env.id}">
</form>

我的Spring控制器方法用

注释
@RequestMapping(value = "/environment/", method = RequestMethod.DELETE)

但是,我收到错误消息&#34;请求的资源不允许使用指定的HTTP方法(请求方法&#39; GET&#39;不支持)。&#34; 所以我知道我的控制器方法没有被调用,删除请求没有正确映射。

如果有人能告诉我如何正确发送此删除请求,我们将不胜感激。

谢谢:)

2 个答案:

答案 0 :(得分:4)

这应该有效:                               

在web.xml文件中注册此过滤器,这会将表单中的_method隐藏参数转换为DELETE Http请求:

<filter>
    <filter-name>HttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>HttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

现在您的请求可以由此类型的处理程序处理:

@RequestMapping(value = "/environment/", method = RequestMethod.DELETE)

答案 1 :(得分:0)

您无法从<form>标记发送DELETE请求。在您的代码中,您仍然将其作为GET发送。

您应该应用基于Ajax的解决方案。

$.ajax({
    url: '/environment/',
    type: 'DELETE',
    success: function(result) {
        // Do something with the result
    }
});

或将您的@RequestMapping注释映射到GET。