假设我有
@ValidLibrary
class Library {
@Valid
List<Book> books;
}
class Book {
@Unique
String title;
}
我想要一个验证器来检查Library
中的书是否都是title
唯一的。我可以这样进行自定义验证:
public class UniqueListValidator implements ConstraintValidator<UniqueList, List<Book> books> {
public boolean isValid(List<Book> books, final ConstraintValidatorContext context) {
// Use books to determine duplicates
// if invalid, find the index in the List
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("title already exists")
.addPropertyNode("title")
.inIterable().atIndex(index)
.addConstraintViolation();
return false;
}
}
并在@UniqueList
类的List<Book> books
的属性上使用Library
,但是这里的问题是我得到的ConstraintViolation
违规是在Library
上,没有简单的方法将该节点转换为Book
。
有更好的解决方案吗?