Spring Boot 2.5.5版本Validation校验注解不生效问题咨询
问题原因及解决方案
1. 错误使用数值校验注解校验字符串
@Min、@Max是专为数值类型设计的校验注解,仅支持BigDecimal、BigInteger、整数、short等数值类型,无法校验字符串长度。你需要替换为校验字符串长度的@Size注解:
public class UserDto { @NotNull @Size(min=5, max=10) private String name; @NotNull @Size(min=3, max=50) private String password; @Email private String email; // 其他原有代码 }
2. 缺少无参构造函数导致反序列化失败
Spring MVC将请求JSON反序列化为UserDto对象时,需要调用类的无参构造方法。你当前仅定义了带参构造函数,默认的无参构造会被覆盖,导致反序列化异常,校验逻辑无法触发,需要补充无参构造:
public UserDto() { }
3. Controller未判断校验结果
你虽然在参数中注入了Errors对象接收校验结果,但没有做任何错误判断,无论校验是否通过都直接返回success。需要添加错误判断逻辑,校验失败时返回对应提示:
@PostMapping public ResponseEntity<String> createUser(@Valid @RequestBody UserDto userDto, Errors errors){ if (errors.hasErrors()) { // 自定义拼接错误提示 String errMsg = errors.getAllErrors() .stream() .map(error -> error.getDefaultMessage()) .collect(Collectors.joining(";")); return ResponseEntity.badRequest().body(errMsg); } return ResponseEntity.ok("success"); }
完成以上修改后,校验逻辑即可正常触发,非法邮箱、长度不符合要求的参数都会被拦截。
内容的提问来源于stack exchange,提问作者braveheartask123
相关产品推荐
相关产品推荐

