Spring Boot中@Valid与@NotBlank校验注解完全失效求助
解决Spring Boot @Valid/@NotBlank校验不生效问题
核心问题:依赖范围错误
你配置的spring-boot-starter-validation依赖添加了<scope>test</scope>,这会导致该依赖仅在测试环境生效,项目运行时无法加载校验实现类,最终导致校验逻辑完全不工作。
修复步骤
修正依赖配置
删除spring-boot-starter-validation的<scope>test</scope>配置,同时可以移除单独的validation-api依赖(spring-boot-starter-validation已包含该依赖,避免版本冲突)。修改后的pom.xml依赖如下:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>验证注解导入正确性
确保实体类中的@NotBlank注解来自javax.validation.constraints.NotBlank包(Spring Boot 2.7.x版本适配该包),不要导入其他无关包的同名注解。添加校验异常处理(可选但推荐)
若需要自定义校验失败的返回结果,可添加全局异常处理器捕获MethodArgumentNotValidException:@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) { Map<String, String> errors = new HashMap<>(); ex.getBindingResult().getAllErrors().forEach((error) -> { String fieldName = ((FieldError) error).getField(); String errorMessage = error.getDefaultMessage(); errors.put(fieldName, errorMessage); }); return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST); } }确认请求参数符合触发条件
确保POST请求体中departmentName字段为null、空字符串或全空格字符串,@NotBlank注解才会触发校验错误。
内容的提问来源于stack exchange,提问作者TestUser
相关产品推荐
相关产品推荐

