Spring3.4.4+Java17升级后Mockito测试因HV000030报错求助
问题解决方法
错误原因
jakarta.validation.constraints.NotBlank约束仅支持校验单个String类型,你将其直接用于String[]数组字段getOrderWellDcCapacity.dcs,导致Hibernate Validator无法找到适配数组类型的验证器,触发HV000030错误。
解决方案
根据业务需求选择对应方案:
方案1:要求数组中每个元素都非空且非空白
使用Spring Validation提供的@EachNotBlank注解(Spring Boot 3.x及以上版本支持),专门用于校验数组/集合中的每个String元素:
import org.springframework.validation.annotation.Validated; import org.springframework.validation.constraints.EachNotBlank; @Validated // 类级别需添加该注解启用方法参数校验 public class YourController { public ResponseEntity<?> getOrderWellDcCapacity( @EachNotBlank(message = "每个dc编码不能为空或空白") String[] dcs ) { // 业务逻辑 } }
如果是在请求体DTO中:
import jakarta.validation.constraints.NotEmpty; import org.springframework.validation.constraints.EachNotBlank; public class DcRequest { @NotEmpty(message = "dcs数组不能为空") // 确保数组本身非空 @EachNotBlank(message = "每个dc编码不能为空或空白") private String[] dcs; // getter、setter }
方案2:仅要求数组本身非空(允许元素为空字符串)
直接使用@NotEmpty注解校验数组:
import jakarta.validation.constraints.NotEmpty; public class DcRequest { @NotEmpty(message = "dcs数组不能为空") private String[] dcs; // getter、setter }
额外检查
- 确保测试用例中传入的
dcs参数符合校验规则,比如避免传入null、空数组,或包含空白字符串的数组(如果用了方案1)。 - 确认
spring-boot-starter-validation依赖版本与Spring Boot 3.4.4一致,该starter已包含Jakarta Validation及Hibernate Validator的适配依赖,无需额外引入其他validation相关依赖。
内容的提问来源于stack exchange,提问作者NehaNm
相关产品推荐
相关产品推荐

