You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中BindingResult始终无错误的校验问题求助

问题排查与解决方案

核心问题:控制器参数顺序错误

Spring MVC 要求 BindingResult 参数必须紧挨着被 @Valid 注解的目标对象参数,否则框架无法将校验结果绑定到该 BindingResult 实例,导致 bindingResult.hasErrors() 始终返回 false。

你的控制器方法中,@ModelAttribute("confirmPassword") String confirmPassword 插在了 @Valid User user 和 BindingResult bindingResult 之间,破坏了这个规则。

修正方案

调整参数顺序,将 BindingResult 直接放在 @Valid User user 之后:

@PostMapping("/registration")
public String registerUser(Model model, @Valid User user, BindingResult bindingResult, @ModelAttribute("confirmPassword") String confirmPassword) {
    if (bindingResult.hasErrors()) {
        model.addAttribute("allProjects", projectService.getAllProjects());
        return "registration";
    }

    // 其余逻辑保持不变
    User existingUser = userService.findByLogin(user.getLogin());
    if (existingUser != null) {
        model.addAttribute("userExistsError", true);
        model.addAttribute("allProjects", projectService.getAllProjects());
        return "registration";
    }

    if (!user.getPassword().equals(confirmPassword)) {
        model.addAttribute("passwordMismatch", true);
        model.addAttribute("allProjects", projectService.getAllProjects());
        return "registration";
    }

    userService.saveUser(user);
    return "redirect:/home";
}

额外检查项

  1. 确认Validation依赖:
    若你使用的是 Spring Boot 2.3 及以上版本,需要手动引入 spring-boot-starter-validation 依赖(之前版本该依赖包含在 spring-boot-starter-web 中):

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    
  2. 正则表达式修正:
    你密码字段的正则表达式中 .{8,$} 是错误写法,应该改为 .{8,}(表示至少8个字符),否则正则会失效:

    @Pattern(regexp = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,}",
            message = "Password must be at least 8 characters long, contain at least one digit, one lowercase letter, one uppercase letter, and one special character")
    

内容的提问来源于stack exchange,提问作者Zetta_11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 15:23:24