Sim*_*n30 5 java spring json jackson spring-mongo
我正在尝试在我的项目中使用枚举,并且需要使用小写而不是大写将它们保存在 mongoDB 集合中。
我有一个带有值 String 字段的枚举和用 Jackson 的@JsonCreator和注释的 setter/getters @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;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个使用这个枚举的类,如下所示:
@Document(collection = "my_collec")
public class MyClass {
@Id
private ObjectId _id;
@Field("st")
private State state;
.....
}
Run Code Online (Sandbox Code Playgroud)
它适用于@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]
.....
Run Code Online (Sandbox Code Playgroud)
此外,当我使用存储库保存一些数据时,保存的枚举始终是大写的。我在带注释的函数中放置了断点,并且代码从未执行。
然后我也尝试使用@JsonGetter& @JsonSetter,@JsonProperty但它从未起作用...我也尝试使用自定义序列化器/反序列化器(StdSerializer并且JsonSerializer得到相同的结果。
有谁知道我在这里缺少什么?
我很抱歉在这里再写一篇关于该主题的帖子,我几乎浏览了所有这些帖子,但没有找到可行的解决方案。提前致谢
PS:我找到了一个 hack 让它工作,但我真的不喜欢它,因为我们正在解析 getter/setter 中的枚举并将其存储为模型中的 Stirng。
| 归档时间: |
|
| 查看次数: |
1205 次 |
| 最近记录: |