您当前的代码有2个问题:
在您
CoBoundedStringListConstraints的
isValid方法中,您应该像这样遍历给定列表的所有元素(设置
allValid适当的标志):
@Overridepublic boolean isValid(List<String> value, ConstraintValidatorContext context) { if (value == null) { return true; } boolean allValid = true; CoBoundedStringConstraints constraints = new CoBoundedStringConstraints(); constraints.initialize(m_annotation); for (String string : value) { if (!constraints.isValid(string, context)) { allValid = false; } } return allValid;}第二个是
equals针对约束违反的实现(
javax.validation.Validator.validate()
返回一个set!)。当您始终输入相同的消息(
should be one of [a,b])时,集合仍将仅包含1个元素。作为解决方案,您可以将当前值添加到消息(class
CoBoundedStringConstraints)之前:
@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) { if (value == null) { return true; } if (!m_boundedTo.contains(value)) { context.disableDefaultConstraintViolation(); context.buildConstraintViolationWithTemplate( value + " should be one of " + m_boundedTo) .addConstraintViolation(); return false; } return true;}


