簡體   English   中英

Java中注釋類型的自定義驗證器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM