Spring MVC可以处理来自POST和GET以外的HTML表单的请求吗?

时间:2010-12-06 02:54:50

标签: spring forms spring-mvc http-method

Spring 3 MVC支持所有4种RESTful方法:GET,POST,PUT和DELETE。但它的视图技术是否在表格上支持它们?如果没有,method代码中form:form属性的实际用途是什么?

我尝试在表单上使用PUT方法:

<form:form action="/myaction" method="PUT">
   ...
</form:form>

生成的HTML是:

<form id="command" action="/myaction" method="post">
   <input type="hidden" name="_method" value="PUT"/>
   ...
</form>

most browsers don't support other methods besides GET and POST以来很清楚。但Spring可以使用名为input且值为_method的其他METHOD_NAME来处理它。可以?

当我将指定的表单发送到用

注释的控制器方法时
@RequestMapping(method=RequestMethod.PUT)

它声称,不支持请求方法 POST 。但是为什么POST而不是PUT呢?在引擎盖下实际发生了什么?

1 个答案:

答案 0 :(得分:16)

使用名为_method的“隐藏参数”并非特定于Spring MVC的标记库,但也被其他一些客户端框架使用。 Spring就是遵循惯例,例如它。

为了正确使用此功能,您需要在web.xml,(HiddenHttpMethodFilter,请参阅javadoc)中添加过滤器,将_method参数转换为HttpServletRequest中的“真实”HTTP方法表示。这是作为过滤器完成的,以强调缺少PUTDELETE是一个浏览器问题 - servlet API支持它就好了。

因此,如果您想在表单中使用这些方法,则需要添加该过滤器。

P.S。您收到“不支持POST”消息的原因是您的表单使用POST,并且您的处理程序使用PUT注释,因此它不匹配。由于您没有定义过滤器,因此忽略_method参数。