JSR Bean Validation 对基本类型集合不生效的问题及解决方案咨询
JSR Bean Validation 对基本类型集合不生效的问题及解决方案咨询
兄弟,我一眼就看到你代码里藏着一个致命问题,再给你梳理下集合验证的正确姿势:
首先修复Controller方法的访问权限!
你把请求处理方法写成private了,Spring MVC根本无法调用这个方法(Spring需要通过反射调用Controller的public方法来处理请求),这直接导致后面的所有验证逻辑都没机会执行!赶紧把方法改成public:@PostMapping(path = RequestMappingConstants.CALCULATE_INTEREST, consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<Response> execute(@Valid @RequestBody @Size(min = 1) List<Long> ids) throws BusinessException { this.processService.execute(ids); return ResponseEntity.ok(Response.builder().build()); }开启集合类型的验证支持
对于直接作为@RequestBody的集合对象,仅用@Valid可能不够,你需要在Controller类上添加@Validated注解,这会告诉Spring要对这个类里的方法参数执行方法级别的验证(包括集合这类顶层对象)。如果还要验证集合里的元素(比如Long不能为null)
可以结合@NotEmpty(替代@Size(min=1),语义更清晰)和元素级注解来做嵌套验证,比如:public ResponseEntity<Response> execute(@Valid @RequestBody @NotEmpty List<@NotNull Long> ids) throws BusinessException { // ... }这里的
@NotNull是验证集合里的每个Long元素都不能为null,这种元素级别的验证需要Java 8+支持,同时确保你的Validation依赖版本兼容(比如Hibernate Validator 6.x+)。检查依赖是否正确引入
如果是Spring Boot项目,确保已经引入了spring-boot-starter-validation依赖,这样才能启用Bean Validation的自动配置:<!-- Maven依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
备注:内容来源于stack exchange,提问作者ThivankaW
相关产品推荐
相关产品推荐

