首页 > 解决方案 > 反序列化 null 值以使用 Jackson 枚举

问题描述

我对 JSON 反序列化并将其映射到枚举有疑问。我从与这两个示例类似的外部 API 获取 JSON:

{
 "someValue": null
}
{
 "someValue": "exists"
}

我想将空值映射到一些默认枚举值。

模型对象

SomeEnum someValue;

和枚举类

public enum SomeEnum {
    @JsonProperty("exists") EXISTS,
    NONE;
}

对于存在,值模型类包含正确的枚举,但如果我null从 API 获取,它仍然null在模型中。

我尝试创建一些由 注释的方法@JsonCreator,创建自己的枚举反序列@JsonEnumDefaultValue化器,但这些解决方案都不适合我。有谁知道,我怎样才能将空值反序列化为一些默认枚举?

标签: javaspring-bootjacksondeserialization

解决方案


好的,所以现在我通过创建自定义枚举反序列化器解决了这个问题。

class SomeEnumDeserializer extends StdDeserializer<SomeEnum> {
    SomeEnumDeserializer() {
        super(SomeEnum.class);
    }

    @Override
    public SomeEnum getNullValue(DeserializationContext ctxt) {
        return SomeEnum.NONE;
    }

    @Override
    public SomeEnum deserialize(JsonParser p, DeserializationContext ctxt) {
        // implementation here
    }

并使用@JsonDeserialize 注册它:

@JsonDeserialize(using = SomeEnumDeserializer.class)
public enum SomeEnum {
// code
}

但我仍然更喜欢使用 @JsonProperty 之类的东西,但对于 null,例如 @JsonNullProperty 或类似的东西。


推荐阅读