Проверка бина Java8 для типа Enum с использованием Hibernate - PullRequest
0 голосов
/ 06 мая 2018

Вот моя ситуация,

У меня есть класс с Enum полями типа. Я хочу выполнить аннотированную проверку для типов enum, аналогично аннотациям для строк, например: @Size, @NotNull и т. Д.

Проблема в том, что json сбой десериализатора на типе enum до проверки.

public class myClass {
    @JsonProperty
    //@SomeCustomValidator -- ??
    private EnumType enumValue;
}

public enum EnumType {
    A,
    B,
    C
}

Несколько вещей:

  1. Я не хочу менять тип данных на String.
  2. Попытка выполнить шаги в следующих темах, не решила мою проблему.

    Попробовал эту ссылку, но получил ошибку в десериализации перед проверкой хитов

    Пробовал эту ссылку, но она работает только тогда, когда тип данных String

1 Ответ

0 голосов
/ 07 мая 2018

Проверка работает после разрешения типа аргумента. Поэтому я не вижу способа использовать аннотации проверки строк в перечислениях. В качестве обходного пути вы можете использовать @JsonCreator и выполнить некоторую проверку перед созданием объекта.

public enum EnumType {
    A,
    B,
    C;

    @JsonCreator
    public static EnumType from(String s) {
        // add your logic here, for example
        /*
        if (Stream.of(values()).map(Enum::name).noneMatch(name -> name.equals(s))) {
            throw new MyServiceException("Bad value " + s);
        }
        */
        return valueOf(s);
    }
}
...