[英]custom validator for annotation type in java
我有枚舉:
public enum Animal {
DOG,
CAT,
BIRD,
HORSE,
COW;
}
和清單,我有這些動物:
[Animal.DOG,Animal.CAT,Animal.COW,Animal.DOG]
我創建特殊的注釋類型來驗證此列表:
@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;
}
這個驗證器拋出了我本地化的消息,但是現在我想添加參數:
變更方法:
布爾值= hasDuplicateAnimal(animalList)
至
動物animal = GiveMeDuplicateAnimal(animalList)
如果我有重復的動物,則將其放入我的信息中。 我的問題是如何設置此消息的參數? 還是我應該選擇不同的策略?
我對Commons-Collections中的謂詞邏輯有很好的經驗。 謂詞是非常簡單的邏輯單元(實現“公共布爾評估(對象o)”),可以很容易地重用。 因此,您可以為集合中的成對動物編寫條件,並使用相同的規則進行驗證和過濾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.