Spring Boot 3中@Pattern、@Size与@Valid注解不生效问题排查
Spring Boot 3 中@Valid与验证注解不生效问题排查与解决
问题背景
正在学习使用Spring Boot 3并管理模拟数据库,尝试通过@Pattern和@Valid注解为用户名和密码的输入添加约束条件。
User类配置
@Column(nullable = false) @Size(min = 5, max = 15) @Pattern(regexp = "^(?=.*[A-Z])(?=.*\\d).+$", message = "Password must contain at least one uppercase letter and one number") private String password;
控制器代码
@PostMapping("/register") public ResponseEntity<Object> registerUser( @Valid @RequestBody RegisterRequest registerRequest, BindingResult result) { try { return ResponseEntity.ok(service.registerUser(registerRequest, result)); } // 其他异常处理逻辑 }
问题现象
由于控制器实际接收的是RegisterRequest DTO,已在该类中添加相同验证注解,但系统仍会接受仅两位字符、无数字和大写字母的密码。尝试将DTO字段拆分传入服务类进行验证,@Valid注解依然未生效,未触发@Size和@Pattern的约束检查。
解决方案
之前错误地将验证约束添加在User类中,导致密码在UserService加密后长度远超@Size限制而报错。正确的做法是:
- 仅在
RegisterRequest类的密码字段上添加@Size和@Pattern验证注解 - 控制器通过
@Valid对RegisterRequest进行前置验证 - 验证通过后,再执行服务层流程、检查数据库重复并完成入库操作
内容的提问来源于stack exchange,提问作者Litmanen84
相关产品推荐
相关产品推荐

