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

Javax @Size约束未生效于JSON请求体的问题排查

问题原因

单元测试能正常触发校验是因为手动创建了ValidatorFactory,它会自动扫描classpath中的校验实现;但Spring MVC上下文里缺少JSR-380校验的具体实现依赖,且未正确配置校验器,导致接口的@Valid注解未生效。

解决方案

1. 补充校验实现依赖

你的pom.xml仅引入了JSR-380的规范API(validation-api),缺少具体实现(Hibernate Validator是最常用的实现)。在<dependencies>中添加以下依赖:

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.2.5.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator-annotation-processor</artifactId>
    <version>6.2.5.Final</version>
</dependency>

版本说明:Spring 5.3.x对应Hibernate Validator 6.x系列,与你使用的validation-api 2.0.1.Final兼容。

2. 配置Spring MVC校验器

如果使用Java配置类,添加以下配置让Spring加载校验器:

@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public Validator getValidator() {
        return new LocalValidatorFactoryBean();
    }
}

如果使用XML配置,添加:

<mvc:annotation-driven validator="validator"/>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

3. 全局捕获校验异常(可选但推荐)

添加全局异常处理器,将校验失败的信息以友好格式返回:

@ControllerAdvice
public class ValidationErrorHandler {
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ResponseBody
    public Map<String, String> handleValidationErrors(MethodArgumentNotValidException ex) {
        Map<String, String> errorMap = new HashMap<>();
        ex.getBindingResult().getAllErrors().forEach(error -> {
            String field = ((FieldError) error).getField();
            String message = error.getDefaultMessage();
            errorMap.put(field, message);
        });
        return errorMap;
    }
}

4. 验证配置

重新启动服务后,用Postman/Curl传入超过25个文档的请求,此时接口会返回400 Bad Request,并携带你定义的错误信息,同时不会执行文档创建逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:17:45