【问题标题】:Can Spring MVC handle requests from HTML forms other than POST and GET?Spring MVC 可以处理来自除 POST 和 GET 之外的 HTML 表单的请求吗?
【发布时间】:2010-12-06 02:54:49
【问题描述】:

Spring 3 MVC 支持所有 4 种 RESTful 方法:GET、POST、PUT 和 DELETE。但它的视图技术是否支持它们在表单上?如果不是,form:form标签中method属性的真正用途是什么?

我尝试在表单上使用 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 可以使用名称为 _method 和值 METHOD_NAME 的附加 input 来处理它。可以?

当我将指定的表单发送到带有

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

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

【问题讨论】:

    标签: spring forms spring-mvc http-method


    【解决方案1】:

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

    为了正确使用它,您需要在您的web.xml 中添加一个过滤器(HiddenHttpMethodFilter,请参阅javadoc),这会将_method 参数转换为HttpServletRequest。这是作为过滤器完成的,以强调缺少 PUTDELETE 是浏览器问题 - servlet API 很好地支持它。

    所以如果你想在你的表单中使用这些方法,你需要添加那个过滤器。

    附:您收到“不支持 POST”消息的原因是您的表单使用了POST,并且您的处理程序使用PUT 进行了注释,因此它不匹配。因为您没有定义过滤器,所以 _method 参数将被忽略。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 2021-09-05
      • 2017-01-23
      • 2016-10-17
      相关资源
      最近更新 更多