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
呢?在引擎盖下实际发生了什么?
答案 0 :(得分:16)
使用名为_method
的“隐藏参数”并非特定于Spring MVC的标记库,但也被其他一些客户端框架使用。 Spring就是遵循惯例,例如它。
为了正确使用此功能,您需要在web.xml
,(HiddenHttpMethodFilter
,请参阅javadoc)中添加过滤器,将_method
参数转换为HttpServletRequest
中的“真实”HTTP方法表示。这是作为过滤器完成的,以强调缺少PUT
和DELETE
是一个浏览器问题 - servlet API支持它就好了。
因此,如果您想在表单中使用这些方法,则需要添加该过滤器。
P.S。您收到“不支持POST”消息的原因是您的表单使用POST
,并且您的处理程序使用PUT
注释,因此它不匹配。由于您没有定义过滤器,因此忽略_method
参数。