У меня есть enum:
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} не может быть в списке, потому что они враги»
И мой валидатор должен проверить это два условия:
- Isмой список уникален?
- В моем списке враги животные (например, кошка и собака)
Поэтому я пишу метод проверки (мой класс реализует 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;
}
и этот валидатор выдал мне локализованное сообщение, но теперь я хотел бы добавить параметры:
изменить метод:
логическое value = hasDuplicateAnimal (animalList)
до
Animal animal = giveMeDuplicateAnimal (animalList)
и если у меня есть дубликаты животных, то яПоместите это животное в мое сообщение.У меня вопрос как параметризовать это сообщение?Или, может быть, я должен выбрать другую стратегию?