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

Spring Boot中@NotBlank校验请求体JSON数组元素不生效解决方法

问题原因

嵌套数组元素校验不生效的核心原因是Java Bean Validation默认不会自动级联校验对象内部的引用类型属性(包括数组、集合内的元素),仅给bodyModel字段加校验注解、没有显式声明级联校验规则的话,框架不会进入数组元素内部执行校验逻辑。

解决步骤

1. 给数组字段添加级联校验注解

修改jsonRequest类中的body字段,添加@Valid注解,告知校验框架需要递归校验数组内的每个bodyModel元素:

public class jsonRequest {

    @NotBlank
    @JsonProperty(value = "name")
    private String name;

    @Valid // 核心:开启级联校验,遍历数组元素执行内部校验规则
    @NotNull(message = "body参数不能为null") // 如需校验数组本身非空,添加该注解
    @Size(min = 1, message = "body数组至少包含一个元素") // 如需校验数组长度不为0,添加该注解
    @JsonProperty(value = "body")
    private bodyModel[] body;

    // 其余字段、getter/setter、构造方法省略
}

注意:@NotBlank注解仅支持String类型字段校验,数组、集合类型的非空校验不要使用@NotBlank,你原有代码中给body数组加的@NotBlank是无效配置。

2. 确认校验依赖引入完整

Spring Boot 2.3.0及以上版本不再将校验组件默认包含在spring-boot-starter-web依赖中,如果你使用的是该版本及以上,需要手动引入校验starter依赖:

  • Maven 配置(pom.xml):
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  • Gradle 配置:
implementation 'org.springframework.boot:spring-boot-starter-validation'

3. 确认控制器层注解配置

你当前控制器层的写法是正确的,@Valid加在@RequestBody参数前即可触发请求体的入口校验,无需额外修改:

public ResponseEntity<BaseResponse> humanController(@RequestHeader Map<String, String> header,@Valid @RequestBody jsonRequest rqBody) throws ServiceException,Exception {
  // 业务逻辑省略
}
补充说明

如果你后续将数组替换为List<bodyModel>、Set<bodyModel>等集合类型,级联校验的配置方式完全一致,只需要在集合字段上添加@Valid注解,即可自动遍历集合内的所有元素执行校验规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:18:33