繁体   English   中英

Spring 4 - HTTP Status 400,不存在必需参数

[英]Spring 4 - HTTP Status 400, Required parameter is not present

我在index.jsp中有Spring表单:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<body>
<form:form action="save" name="employeeDTO" method="POST">
        <label for="name">Name</label><input id="name" type="text" required><br>
        <label for="surname">Surname</label><input id="surname" type="text" required><br>
        <label for="email">E-mail</label><input id="email" type="email" required><br>
        <label for="salary">Salary</label><input id="salary" type="number" required><br>
        <input type="submit" value="Save">
</form:form>
</body>
</html>

WorkController.java中我尝试映射表单提交(此时,它不对数据做任何事情):

@Controller
public class WorkController {

    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public String save(@RequestParam EmployeeDTO employeeDTO){
        return "saved";
    }
}

但我得到HTTP 400状态: Required EmployeeDTO parameter 'employeeDTO' is not present描述: The request sent by the client was syntactically incorrect.

EmployeeDTO.java

public class EmployeeDTO implements Serializable, DTO {
    private Long id;
    private String name;
    private String surname;
    private String email;
    private Double salary;

    public EmployeeDTO(){}

    public EmployeeDTO(Long id, String name, String surname, String email, Double salary){
        this.id = id;
        this.name = name;
        this.surname = surname;
        this.email = email;
        this.salary = salary;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Double getSalary() {
        return salary;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }

    @Override
    public Serializable toEntity() {
        return new Employee(getId(), getName(), getSurname(), getEmail(), getSalary());
    }
}

如果我从save方法签名中删除@RequestParam EmployeeDTO employeeDTO - 它可以工作,它会重定向到saved.jsp文件。 之前,我使用@RequestParam String name, @RequestParam String surname etc来从HTML表单中捕获数据。 有没有解决方案从Spring表单“捕获”数据作为DTO对象? 如果abyody决定帮助我,我会很高兴 - 谢谢你提前。

使用@RequestBody将所有正文内容(例如:JSON)映射到DTO对象。 使用@ModelAttribute将所有表单发布参数映射到DTO对象。

您可以尝试使用@ModelAttribute在SO中访问ModelAttribute问题以便清楚地了解它)

@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(@ModelAttribute("employeeDTO") EmployeeDTO employeeDTO){
    return "saved";
}

in spring mvc 3.1使用过它

如前面的答案中所述,@ ModelAttirube是修复的一部分,但是, 要使值实际绑定到模型属性,您必须在表单上添加名称属性,如下所示

<form:form action="save" name="employeeDTO" method="POST">
    <label for="name">Name</label><input id="name" name="name" type="text" required><br>
    <label for="surname">Surname</label><input id="surname" name="surname" type="text" required><br>
    <label for="email">E-mail</label><input id="email" type="email" name="email" required><br>
    <label for="salary">Salary</label><input id="salary" type="number" name="salary" required><br>
    <input type="submit" value="Save">
</form:form>

如果您正在使用spring MVC,那么请确保您的控制器中的“ModelAndView”具有“@RequestMapping”。 并在jsp页面中检查你的ajax调用synatax。 这个网址可以帮助你

HTTP状态400 - 必需字符串参数“xx”不存在

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM