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

Spring Boot中@Valid与@NotBlank校验注解完全失效求助

解决Spring Boot @Valid/@NotBlank校验不生效问题

核心问题:依赖范围错误

你配置的spring-boot-starter-validation依赖添加了<scope>test</scope>,这会导致该依赖仅在测试环境生效,项目运行时无法加载校验实现类,最终导致校验逻辑完全不工作。

修复步骤

  1. 修正依赖配置
    删除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>
    
  2. 验证注解导入正确性
    确保实体类中的@NotBlank注解来自javax.validation.constraints.NotBlank包(Spring Boot 2.7.x版本适配该包),不要导入其他无关包的同名注解。

  3. 添加校验异常处理(可选但推荐)
    若需要自定义校验失败的返回结果,可添加全局异常处理器捕获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);
        }
    }
    
  4. 确认请求参数符合触发条件
    确保POST请求体中departmentName字段为null、空字符串或全空格字符串,@NotBlank注解才会触发校验错误。

内容的提问来源于stack exchange,提问作者TestUser

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:55:19