我有枚举:
public enum Animal {
DOG,
CAT,
BIRD,
HORSE,
COW;
}
和List,我有这些动物:
[Animal.DOG,Animal.CAT,Animal.COW, Animal.DOG]
我创建了特殊的注释类型来使这个List有效:
@AnimalListConstaint
我在属性文件(animal_en.properties)中也有本地化的参数化消息:
my.localized.message.for.animal.unique =“列表中的动物{0}不唯一”my.localized.message.for.animal.enemies = “动物{0}和{1}不能出现在 列表,因为他们是敌人“
我的验证员应检查这两个条件:
所以我写了验证方法(我的类实现了ConstraintValidator):
public boolean isValid(final List<Animal> animalList, final ConstraintValidatorContext context) {
context.disableDefaultConstraintViolation();
boolean result = true;
if (hasDuplicateAnimal(animalList)) {
context.buildConstraintViolationWithTemplate("{my.localized.message.for.animal.unique}")
.addConstraintViolation();
result = false;
}
if (hasEnemiesInList(animalList)) {
context.buildConstraintViolationWithTemplate("{my.localized.message.for.animal.enemies}")
.addConstraintViolation();
result = false;
}
return result;
}
并且这个验证器抛出了我的本地化消息,但现在我想添加参数:
改变方法:
boolean value = hasDuplicateAnimal(animalList)
到
动物动物= giveMeDuplicateAnimal(animalList)
如果我有重复的动物,那么我把这只动物放在我的信息中。 我的问题是如何参数化这个消息?或许我应该选择不同的策略?
答案 0 :(得分:0)
我在公共收藏中找到了Predicate Logic的经验。谓词是非常简单的逻辑单元(实现“公共布尔值(对象o)”),可以很容易地重用。 因此,您可以为集合中的dublicate动物编写条件,并使用相同的规则进行验证和过滤。