gpt4 book ai didi

java - java中注释类型的自定义 validator

转载 作者:行者123 更新时间:2023-12-01 05:49:11 28 4
gpt4 key购买 nike

我有枚举:

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 = "Animal {0} in list is not unique" my.localized.message.for.animal.enemies= "Animal {0} and {1} can't be in the list, because they are enemies"

我的 validator 应该检查这两个条件:

  • 我的列表独一无二吗?
  • 在我的列表中的敌对动物(例如猫和狗)

所以我编写验证方法(我的类实现 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;
}

这个 validator 向我抛出了本地化消息,但现在我想添加参数:

更改方法:

boolean value = hasDuplicateAnimal(animalList)

Animal animal = giveMeDuplicateAnimal(animalList)

如果我有重复的动物,那么我会将这个动物放入我的消息中。我的问题是如何参数化此消息?或者也许我应该选择不同的策略?

最佳答案

我在公共(public)集合中找到了谓词逻辑,并获得了很好的经验。谓词是非常简单的逻辑单元(实现“public boolean eat(Object o)”),可以轻松重用。因此,您可以为集合中的重复动物编写条件,并使用相同的规则进行验证和过滤。

关于java - java中注释类型的自定义 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5141426/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com