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

标签 java spring spring-mvc http-status-code-405

我的 Spring MVC 项目有问题,当我尝试在 Controller 中调用 post 方法时,我收到“HTTP 状态 405 - 请求方法‘POST’不受支持”。我没有使用 Spring 安全性。返回“index”是基本jsp,并且基于“view”属性它更改 View 。有人可以发现我做错了什么吗?

Controller :

@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}" alt="" height="220" width="300"/>

            <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;
}
}

最佳答案

您的表单映射与表单操作不一致,表单操作为

${pageContext.request.contextPath}/rental/rent/create/${car.id}

您的类级别映射是rent,方法级别映射是create,因此请求中唯一可以在其前面的是上下文路径,但您有${pageContext.request.contextPath}/rental

您可能已经将上下文(都是硬编码的)和变量加倍了,因此您的请求被某些仅接受 GET 请求的映射捕获

关于java - Spring MVC HTTP 状态 405 - 不支持请求方法 'POST',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28416112/

相关文章:

java - 方法参数类型 [java.lang.Integer] 缺少 URI 模板变量 'studentId' - Spring MVC

java - Spring 部分更新对象数据绑定(bind)

java - 从扫描仪获取用户输入时打印到控制台

java - 为什么我的 'transparent' 叠加 View 不透明?

java - 带有纯 java 配置的 Spring 3.2 @value 注释不起作用,但 Environment.getProperty 有效

java - 如何强制 spring org.springframework.format.annotation.DateTimeFormat 为自定义 DateFormatter

java - Spring 注入(inject)失败?

java - 使用 JSch 连接到 VShell 时为 "No appropriate prime between 1024 and 1024 is available"

Javaee mbean 与单例

java - 多个 Maven 配置文件激活多个 Spring 配置文件