Spring MVC HTTP 状态 405 - 不支持请求方法“POST”
Posted
技术标签:
【中文标题】Spring MVC HTTP 状态 405 - 不支持请求方法“POST”【英文标题】:Spring MVC HTTP Status 405 - Request method 'POST' not supported 【发布时间】:2015-04-09 13:36:19 【问题描述】:我在使用 Spring MVC 项目时遇到问题,当我尝试在控制器中调用 post 方法时,我得到“HTTP 状态 405 - 不支持请求方法 'POST'”。我没有使用弹簧安全。返回“index”是基本的jsp,并基于“view”属性改变视图。有人能找到我做错了什么吗?
控制器:
@Controller
@RequestMapping(value = "rent")
public class RentController
@Autowired
CarBean carBean;
@RequestMapping(value = "create/carId", method = RequestMethod.POST)
public String makeRentPost(@ModelAttribute("makeRent") @Valid RentForm rent, @PathVariable("carId") Long carId, BindingResult result, ModelMap model)
if (!result.hasErrors())
model.addAttribute("makeRent", new RentForm());
model.addAttribute("view", ViewEnums.MAKERENT.toString());
else
model.addAttribute("view", ViewEnums.MAIN.toString());
return "index";
@RequestMapping(value = "create/carId", method = RequestMethod.GET)
public String makeRent(@PathVariable("carId") Long carId, ModelMap modelMap)
modelMap.addAttribute("makeRent", new RentForm());
modelMap.addAttribute("car", carBean.get(carId));
modelMap.addAttribute("view", ViewEnums.MAKERENT.toString());
return "index";
JSP:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="s" uri="http://www.springframework.org/tags" %>
<div id="featured" class="container">
<div id="box1">
<img src="$car.photoURL" />
<h2 class="subtitle">$car.brand $car.model</h2>
<ul>
<li><b><s:message code="car.year"/> </b>$car.year</li>
<li><b><s:message code="car.engineCapacity"/> </b>$car.engineCapacity</li>
<li><b><s:message code="car.doorsNumber"/> </b>$car.doorsNumber</li>
<li><b><s:message code="car.color"/> </b>$car.color</li>
<li><b><s:message code="car.passengersNumber"/> </b>$car.passengersNumber</li>
<li><b><s:message code="car.segment"/> </b>$car.segment</li>
<li><b><s:message code="car.gearbox"/> </b>$car.gearbox</li>
<li><b><s:message code="car.engine"/> </b>$car.engine</li>
</ul>
</div>
</div>
<form:form action="$pageContext.request.contextPath/rental/rent/create/$car.id" method="POST" commandName="makeRent">
<ul style="list-style-type:none">
<li><s:message code="rent.startDate"/> <form:input path="startDate" id="date-pick-start" /> <form:errors path="startDate"/></li>
<li><s:message code="rent.endDate"/> <form:input path="endDate" id="date-pick-end" /> <form:errors path="endDate"/></li>
<li><input type="submit" value="Dodaj"/></li>
</ul>
</form:form>
一个表单对象:
public class RentForm
@NotBlank
private String startDate;
@NotBlank
private String endDate;
public String getStartDate()
return startDate;
public void setStartDate(String startDate)
this.startDate = startDate;
public String getEndDate()
return endDate;
public void setEndDate(String endDate)
this.endDate = endDate;
【问题讨论】:
【参考方案1】:您的表单映射与您的表单操作不一致,表单操作是
$pageContext.request.contextPath/rental/rent/create/$car.id
您的类级别映射是rent
方法级别映射是create
,所以请求中唯一可以在它前面的是上下文路径,但您有$pageContext.request.contextPath/rental
您可能已经将您的上下文(硬编码)和通过变量加倍,因此您的请求被一些只接受 GET 请求的映射捕获
【讨论】:
我在 web.xml 中声明了 /rental以上是关于Spring MVC HTTP 状态 405 - 不支持请求方法“POST”的主要内容,如果未能解决你的问题,请参考以下文章
不支持 Spring MVC 请求方法“POST”-> HTTP 405
HTTP状态405 - 不支持请求方法'POST' - Spring Security
Spring Boot POST 请求返回 http 状态 405“方法不允许”而不是 HTTP 状态 404
Spring MVC PUT 请求返回 405 Method Not Allowed
jsp spring mvc 上传时HTTP Status 405 - Request method 'GET' not supported是啥原因