列表上的Java Validator唯一约束

时间:2018-08-17 08:06:46

标签: java hibernate validation hibernate-validator

假设我有

@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

有更好的解决方案吗?

0 个答案:

没有答案