Spring Boot项目中@NotNull与@NotBlank注解失效问题求助
解决Spring Boot中@NotNull/@NotBlank注解不生效的问题
核心问题定位
Spring Boot 3.x 基于 Jakarta EE 9 规范,原有的 javax.validation 包已迁移至 jakarta.validation,你当前使用的注解和@Valid仍为旧的javax包,这是校验不生效的核心原因。
具体修复步骤
1. 清理冗余依赖
spring-boot-starter-validation 已包含适配Spring Boot版本的Hibernate Validator,无需单独引入hibernate-validator依赖,避免版本冲突。删除以下依赖代码:
<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>8.0.0.Final</version> </dependency>
2. 替换校验包为Jakarta版本
- 实体类注解替换:将
javax.validation.constraints替换为jakarta.validation.constraintsimport jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; public class YourEntity { @NotNull(message = "name can't be null") @NotBlank(message = "name can't be empty") private String name; // 其他字段、getter/setter方法 } - 控制器@Valid替换:将
javax.validation.Valid替换为jakarta.validation.Validimport jakarta.validation.Valid; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class YourController { @PostMapping("/submit") public String submit(@RequestBody @Valid YourEntity entity) { // 业务逻辑实现 return "success"; } }
3. 捕获校验错误(可选)
如需自定义错误返回格式,可在控制器方法中添加BindingResult参数处理校验结果:
@PostMapping("/submit") public String submit(@RequestBody @Valid YourEntity entity, BindingResult result) { if (result.hasErrors()) { return result.getAllErrors().stream() .map(error -> error.getDefaultMessage()) .collect(Collectors.joining("; ")); } return "success"; }
4. 保持Spring Boot版本一致性
确保项目中所有Spring Boot Starter依赖的版本与spring-boot-starter-validation的3.0.4一致,避免版本不兼容问题。
内容的提问来源于stack exchange,提问作者BertDR
相关产品推荐
相关产品推荐

