Я пытаюсь использовать перечисления в моем проекте, и мне нужно сохранить их в коллекции 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 в модели.