JSR 303:如何validation注释对象的集合?
是否有可能validationJSR 303 – Jave Bean Validation中的对象集合,其中集合本身没有任何注释,但包含的元素是做什么的?
例如,是否有可能由于第二个人的空名称而导致违反约束:
List<Person> people = new ArrayList<Person>(); people.add(new Person("dave")); people.add(new Person(null)); Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); Set<ConstraintViolation<List<Person>>> validation = validator.validate(people);
是的,只需在集合中添加@Valid
。
这里是一个来自Hibernate Validator Reference 的例子 。
public class Car { @NotNull @Valid private List<Person> passengers = new ArrayList<Person>(); }
这是标准的JSR-303行为。 参见规范的第3.1.3节。
您也可以将@NotEmpty
添加到集合中。
public class Car { @NotEmpty(message="At least one passenger is required") @Valid private List<Person> passengers = new ArrayList<Person>(); }
这将确保至less有一个乘客存在,并@Valid
注释确保每个Person
对象被validation
你当然也可以迭代列表并在每个元素上调用Validator.validate。 或者把List放入一些包装bean中,并用@Valid对它进行注释。 扩展ArrayList进行validation对我来说似乎是错误的。 你有一个特定的用例,你想解决这个问题? 如果是这样,也许你可以多解释一下。 回答你最初的问题:
是否有可能validationJSR 303 – Jave Bean Validation中的对象集合,其中集合本身没有任何注释,但包含的元素是做什么的?
没有
我写了这个generics类:
public class ValidListWrapper<T> { @Valid private List<T> list; public ValidListWrapper(List<T> list) { this.list = list; } public List<T> getList() { return list; } }
如果您正在使用Jackson库来反序列化JSON,则可以在构造函数中添加@JsonCreator
注释,并且Jackson会自动将JSON数组反序列化为包装对象。