【问题标题】:Request Mapping method not running when data validation fails (Spring MVC)数据验证失败时请求映射方法不运行(Spring MVC)
【发布时间】:2021-02-27 09:23:44
【问题描述】:

我目前正在学习Spring MVC,数据验证看起来很简单,我的问题如下:当我输入无效的数据并按下提交按钮时,请求映射方法根本没有触发,它发送给我到“HTTP 状态 400 - 错误请求”。我的目标是查看使用“BindingResult”是否有任何错误,但如果输入的数据无效,则方法体不会运行。 (使用休眠验证)。这是一些代码。

用户对象:

public class User {
    @NotNull
    @Size(min = 4, max = 25, message = "Must be between 4 and 25 characters")
    private String firstName;

    @NotNull
    @Size(min = 4, max = 25, message = "Must be between 4 and 25 characters")
    private String lastName;

    @Email
    private String email;

    @Size(min = 8)
    private String userPassword;
}

控制器:打开表单页面

@RequestMapping("createAccount")
public String register(Model model) {
    model.addAttribute("newUser", new User());
    return "register";
}

这就是问题所在。当我按下提交按钮时,此方法应该运行,当数据有效时,它会返回 userinteface.jsp 以及所有输入的数据,但当输入的数据无效时,它会直接将我发送到 HTTP 状态 400 - 错误请求。

@RequestMapping("signUp")
public String signUp(@Valid @ModelAttribute("newUser") User user,
    Model model, BindingResult bindingResult) {

    model.addAttribute("dbUser", user);


    if (bindingResult.hasErrors()) return "register";

    return "userinterface";
}

这是我的 register.jsp

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
    
    <html>
    
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>Register</title>
        <meta name="description" content="An interactive getting started guide for Brackets.">
        <link rel="stylesheet" type="text/css" href="resources/css/main.css" />
        <link href="https://fonts.googleapis.com/css2?family=Nova+Round&display=swap" rel="stylesheet">
    </head>
    
    <body>
    
    <div class = "container">
    
        <h1>- Register -</h1>
    
        <ul>
    
            <form:form action ="signUp" modelAttribute="newUser">
    
                <form:input path="firstName" class = "cred" placeholder="First Name"/>
                <form:errors path="firstName" cssClass="error"/><br><br>
    
                <form:input path="lastName" class = "cred" placeholder="Last Name"/><br><br>
                <form:errors path="lastName" cssClass="error"></form:errors><br><br>
    
                <form:input path="email" class = "cred" placeholder="E-mail"/>
                <form:errors path = "email" cssClass="error"/><br><br>
    
                <form:password path="userPassword" class = "cred" placeholder="Password"></form:password><br><br>
                <form:errors path="userPassword" cssClass="error"/>
    
                <form:input path="age" type = "number" class = "cred" placeholder="Age"/><br><br>
    
    
                - <input type ="submit" class = "submitButton" value = "Add User"> -<br><br>
                <a href = index.jsp>cancel</a>
    
            </form:form>
    
        </ul>
    
    </div>
    
    </body>
    
    </html>

【问题讨论】:

    标签: java hibernate validation spring-mvc


    【解决方案1】:

    问题出在方法参数上。我放了 User、Model、BindingResult。应该是 User, BindingResult, Model 所以基本上 Binding Result 必须在 User 对象之后。

    错误的方式:

    @RequestMapping("signUp")
    public String signUp(@Valid @ModelAttribute("newUser") User user,
                         Model model, BindingResult bindingResult){
    

    正确的方法:

    public String signUp(@Valid @ModelAttribute("newUser") User user,
                         BindingResult bindingResult, Model model){
    

    我想知道为什么这些问题总是只发生在我身上!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 2015-10-21
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多