【发布时间】:2018-02-08 15:40:53
【问题描述】:
我想使用 Hibernate Validator 针对 JSR 303 注释验证 JSON 数组。虽然验证适用于 JSON 对象和数组类型的属性(使用 @Valid),但顶级 JSON 数组的元素会跳过验证。
例如:
public class ValidationTest {
public static void main(String[] args) throws IOException {
ObjectMapper m = new ObjectMapper();
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
System.out.println(validator.validate(m.readValue("{}", Person.class)));
System.out.println(validator.validate(m.readValue("[{}]", Person[].class)));
System.out.println(validator.validate(m.readValue("{\"array\":[{}]}", PersonArray.class)));
}
}
class Person {
@NotNull
private String name;
public String getName() {
return name;
}
public Person setName(String name) {
this.name = name;
return this;
}
}
class PersonArray {
@Valid
private Person[] array;
public Person[] getArray() {
return array;
}
public PersonArray setArray(Person[] array) {
this.array = array;
return this;
}
}
输出:
[ConstraintViolationImpl{interpolatedMessage='must not be null', propertyPath=name, rootBeanClass=class com.radius.Person, messageTemplate='{javax.validation.constraints.NotNull.message}'}]
[]
[ConstraintViolationImpl{interpolatedMessage='must not be null', propertyPath=array[0].name, rootBeanClass=class com.radius.PersonArray, messageTemplate='{javax.validation.constraints.NotNull.message}'}]
如您所见,Person 和 array 内的 PersonArray 递归验证了所需的 name 属性,但 Person[] 不验证。有没有办法对顶级 JSON 数组进行递归验证?
【问题讨论】:
标签: java json validation