Java Spring перечисляет Jackson Serializer для вставки / извлечения данных - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь использовать перечисления в моем проекте, и мне нужно сохранить их в коллекции mongoDB, используя строчные буквы, а не UPPERCASE.

У меня есть перечисления со значением поля String и сеттеры / геттеры с аннотациями Джексона @JsonCreator и @JsonValue.

public enum State {
    GREEN   ("vert"),
    ORANGE  ("orange"),
    RED     ("rouge");

    private final String value;

    State(String val) {
        this.value = val;
    }

    @JsonCreator
    public static State fromValue(String value) {
        if (value != null) {
            for (State state : values()) {
                if (state.value.equals(value)) {
                    return state;
                }
            }
        }

        throw new IllegalArgumentException("Invalid state: " + value);
    }

    @JsonValue
    public final String toValue() {
        return value;
    }
}

У меня есть класс, использующий это перечисление, например:

@Document(collection = "my_collec")
public class MyClass {

    @Id
    private ObjectId _id;

    @Field("st")
    private State state;
.....
}

Он работает правильно для @RequestBody моего маршрута, но когда я пытаюсь получить некоторые данные из mongodbгде перечисления сохраняются как строки в нижнем регистре, каждый раз происходит сбой со следующим исключением:

java.lang.IllegalArgumentException: No enum constant package.enums.State.vert
at java.lang.Enum.valueOf(Enum.java:238) ~[na:1.8.0_171]
.....

Более того, когда я сохраняю некоторые данные с помощью своего репозитория, сохраненное перечисление всегда имеет верхний регистр.Я поместил точки останова в свои аннотированные функции, и код никогда не выполняется.

Затем я попытался также использовать @JsonGetter & @JsonSetter, @JsonProperty, но это никогда не работало ... Я также пыталсяиспользуя пользовательский Serializer / DeSerializer (StdSerializer и JsonSerializer с тем же результатом.

Кто-нибудь знает, что мне здесь не хватает?

Извините, что написал еще один пост на этомЯ почти просмотрел все из них, не найдя рабочего решения. Заранее спасибо

PS: я нашел хак, чтобы заставить его работать, но мне действительно не нравится, когда мы анализируем перечисление вПолучатели / сеттеры и сохраняющие их как Stirng в модели.

...