POST 请求的 Spring Controller 405 错误

Posted

技术标签:

【中文标题】POST 请求的 Spring Controller 405 错误【英文标题】:Spring Controller 405 errors for POST request 【发布时间】:2015-11-07 18:26:03 【问题描述】:

我正在关注这个Tutorial。它有一个构建错误,我通过在 POM.xml 中添加以下代码来修复它

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-war-plugin</artifactId>
     <version>2.3</version>
     <configuration>
          <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

该项目按预期运行良好。现在我添加了一个简单的表单,它向控制器发送一个发布请求。搜索页面是这样的

<form name='SearchForm' action="<c:url value='/search' />" method='POST'>
    <center>Search By Name : <input type="text" name="name" id="name" /><input type="Submit" name="action" value="Search"> </td></center>
</form>

控制器看起来像这样(即使我硬编码搜索参数,请求也没有到达控制器)

@ResponseBody
@RequestMapping(value="/search" , method=RequestMethod.POST)
public ModelAndView searchUser(HttpServletRequest request, HttpServletResponse response)

    ModelAndView model = new ModelAndView("searchPage");
    model.addObject("userDTOList", userService.searchUser("sam"));
    return model;

我有相关的服务和模态以及 DAO 类来进行检索。如果我将请求更改为 GET,它将按预期工作。但是当我尝试 POST 方法时,我得到 405 异常。

HTTP Status 405 - Request method 'POST' not supported

我在这方面做错了什么?提前致谢

【问题讨论】:

删除@ResponseBody 这并没有什么不同。我仍然收到 405 异常。 @Visahan 你也可以在你的 searchpage.html 中试试这个代码吗: 我试过了,现在可以了,谢谢你的帮助。 【参考方案1】:

本教程使用 springSecurityFilterChain 并配置了 CSRF 保护并 Spring Security 3.2.3 所以将以下内容添加到您的 searchpage.html

<input type="hidden"
name="$_csrf.parameterName"
value="$_csrf.token"/>

【讨论】:

以上是关于POST 请求的 Spring Controller 405 错误的主要内容,如果未能解决你的问题,请参考以下文章

ajax和springmvc的请求响应原理

SpringBoot 请求消息体解密(通信加密解密)

使用 ReadableStream 作为请求正文进行获取

Spring,不支持请求方法“POST”[关闭]

在 Spring 中结合 GET 和 POST 请求方法

spring boot应用集成cas单点登录,post请求拿不到参数