Spring 的 POST 在 Tomcat 8 上编辑表单失败并显示 405,而在 tomcat 7 上有效

POST of Spring edit form on Tomcat 8 fails with 405 while on tomcat 7 works

在编辑表单中设置无效值(大于 Long 限制的值)导致在 tomcat 8 上提交 (POST) 时出现 405。

在 tomcat 7 上的相同提交按预期工作并显示字段绑定错误:

Failed to convert property value of type java.lang.String to required type java.lang.Long for property userId; nested exception is java.lang.NumberFormatException: For input string: "56345345345345345345345345"

有什么想法吗?

Long 的最大值是 9223372036854775807。你的数字比它大。 尝试 BigDecimal 作为参数或将其作为字符串获取,然后将其解析为 BigDecimal.

最后我发现原因与Spring根据隐藏字段_method将请求从POST更改为PUT有关(在HiddenHttpMethodFilter上,请参阅[1]) 但永远不会将其改回以前的方法。因此,当请求更新表单与验证或绑定错误消息一起显示时,转发 Spring 执行 (InternalResourceView),包含包装请求,该请求的方法被覆盖为 PUT 和由于这个原因被 Tomcat >= 8.

拒绝

一个好的方法似乎是使用手动过滤器,它将方法更改为 GET on FORWARD [2]、[3]

[1]

[2]405 JSP error with Put Method

[3]https://jira.spring.io/browse/SPR-12848