Как настроить сообщение об ошибке проверки в классе Validator - PullRequest
0 голосов
/ 24 февраля 2020

Я создаю Validator, который проверяет строку на соответствие перечислению на основе Раздела 5 https://www.baeldung.com/javax-validations-enums

У меня работает следующий код

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = ValueOfStringEnumValidator.class)
public @interface ValueOfStringEnum {
Class<? extends Enum<?>> enumClass();
String message() default "must be any of enum {enumClass}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
} 

public class ValueOfStringEnumValidator implements ConstraintValidator<ValueOfStringEnum, CharSequence> {
private List<String> allowedValues;

 @Override
 public void initialize(ValueOfStringEnum annotation) {
 allowedValues = Stream.of(annotation.enumClass().getEnumConstants())
  .map(Enum::name)
  .collect(Collectors.toList());
 }

 @Override
 public boolean isValid(CharSequence value, ConstraintValidatorContext context) {
  if (value == null) {
    return true;
  }

  return allowedValues.contains(value.toString());
}
}

Далее я хотел бы изменить сообщение так, чтобы текст детализировал значения Enum, а не выводил имя класса Enum. Любые указатели будут оценены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...