请求方法 'POST' 不支持。

8
根据Spring文档(在这里)的说明:
尽管HTTP定义了这四种方法,但HTML仅支持两种:GET和POST。幸运的是,有两种可能的解决方法:您可以使用JavaScript来执行PUT或DELETE,或者只需使用“真实”方法作为附加参数(在HTML表单中建模为隐藏输入字段)进行POST。
他们采用了后一种方式,并可通过以下Spring MVC表单标记实现:
<form:form method="delete">
   <input type="submit" value="Delete"/>
</form:form>

问题在于当我点击“删除”时,我的页面会抛出以下错误:
HTTP Status 405 - Request method 'POST' not supported

我将org.springframework.web的调试级别改为debug并发现以下信息:

DEBUG AnnotationMethodHandlerExceptionResolver - Resolving exception from handler [foo.bar.MessageForm@da9246]:
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported

我使用了RestClient并使用DELETE方法,该方法如预期一样被调用。我在这里做错了什么?

我尝试使用RestClient将POST作为参数,并返回状态码:405方法不允许。问题可能出在哪里? - Joopiter
你能发布你的控制器吗? - hisdrewness
@hisdrewness 是的,我可以,但我认为问题不在控制器的URL映射上,因为使用RestClient是正常的。 - Joopiter
1个回答

6
你需要在web.xml中配置HiddenHttpMethodFilter。
详细信息可以在这里找到:这里

我配置了过滤器并放置了过滤器映射,包含Spring MVC Dispatcher的<servlet-mapping>,但仍然无法工作。还有其他建议吗? - Joopiter
将<servlet-mapping>更改为<url-pattern> *</ url-pattern>,它可以正常工作。似乎使用urlrewrite是问题的一部分,因为当我尝试<url-pattern> app / * </ ..>时,此过滤器首先被验证,然后才是urlrewrite过滤器。谢谢Maximdim! - Joopiter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接