不支持请求方法“POST”

Posted

技术标签:

【中文标题】不支持请求方法“POST”【英文标题】:Request method 'POST' not supported 【发布时间】:2011-05-04 20:43:44 【问题描述】:

根据 Spring 文档here:

虽然 HTTP 定义了这四种方法,但 html 只支持两种:GET 和 POST。幸运的是,有两种可能的解决方法:您可以使用 javascript 执行 PUT 或 DELETE,或者简单地使用 'real' 方法作为附加参数执行 POST(建模为 HTML 表单中的隐藏输入字段)。

他们做了后者,可以用下面的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 方法不允许。问题可能出在哪里? 你能发布你的控制器吗? @hisdrewness 是的,我可以,但我认为问题不在于控制器的 url 映射,因为使用 RestClient 可以正常工作。 【参考方案1】:

你需要在你的 web.xml 中配置 HiddenHttpMethodFilter

详情可见here:

【讨论】:

我配置了过滤器并放置了过滤器映射以包含Spring MVC Dispatcher的,但仍然没有工作。还有其他建议吗? 更改为 * 并且效果很好。似乎使用 urlrewrite 是问题的一部分,因为当我尝试 app/* 时,此过滤器首先在 urlrewrite 过滤器之前得到验证。谢谢 maximdim!

以上是关于不支持请求方法“POST”的主要内容,如果未能解决你的问题,请参考以下文章

错误 405 请求方法 'POST' 不支持 Spring Security

Postman 不支持请求方法“POST”

使用 Spring Security 登录:不支持请求方法“POST”

如何修复 - 请求的资源不支持 http 方法“POST”

HTTP状态405 - 不支持请求方法'POST' - Spring Security

Spring MVC HTTP 状态 405 - 不支持请求方法“POST”