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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:07:05