Java Spring枚举Jackson Serializer进行数据插入/获取

时间:2018-05-11 16:29:53

标签: java json spring jackson spring-mongo

我正在尝试在项目中使用枚举,需要使用小写而不是大写将它们保存在mongoDB集合中。

我的枚举值为字符串字段,并且使用杰克逊的@JsonCreator@JsonValue注释了setter / getters。

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(StdSerializerJsonSerializer,结果相同。

有谁知道我在这里缺少什么?

我很遗憾在这里再写一篇关于这个主题的帖子我几乎没有找到一个有效的解决方案就浏览了所有这些帖子。 提前致谢

PS:我找到了一个让它工作的黑客,但我真的不喜欢它,因为我们正在解析getter / setter中的枚举并将其存储为模型中的Stirng。

0 个答案:

没有答案