Spring 3.0.6版本中org.springframework.validation.Errors是否存在Bug?
Spring Boot 3.x校验不生效问题分析
这并非Bug,而是Spring Boot 3.x(基于Spring 6)与2.x版本间校验API命名空间迁移导致的差异。
核心原因
Spring Boot 2.x依赖Java EE规范下的javax.validation校验API,而Spring Boot 3.x全面切换为Jakarta EE规范的jakarta.validationAPI。你的Taco类中使用的@NotNull、@Size注解如果是javax.validation.constraints包下的,在3.x版本中不会被校验引擎识别,自然无法捕获错误。
解决步骤
替换注解包路径
修改Taco类的注解导入,从Java EE的javax包切换到Jakarta包:import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; public class Taco { @NotNull @Size(min = 5, message = "Name must be at least 5 characters long") private String name; ... }确认依赖正确性
Spring Boot 3.x中,只需引入spring-boot-starter-validation依赖即可自动启用Jakarta校验支持,无需额外配置:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
完成以上修改后,重新启动应用,传入空Taco对象时就能正常捕获到2个校验错误,和Spring Boot 2.5.3中的表现一致。
内容的提问来源于stack exchange,提问作者MLNOOB
相关产品推荐
相关产品推荐

