首页 > 解决方案 > 将 Gsons JsonNull 对象转换为枚举

问题描述

我必须使用返回以下内容的 API。

{
    “状态”:“确定”,
    “数据”: {       
        “mfa”:空
    }
}

mfa可以是真、假或空。Null 是 mfa 状态未知时的返回值。所以我认为用枚举建模会很好,如果响应为空,则表示它的未知状态,如下所示:

@JsonAdapter (MFAAdapter.class)
public enum MFA {
    UNKNOWN,
    USED,
    NOT_USED
}

我还编写了一个适配器来处理转换。

public class MFAAdapter implements JsonDeserializer<MFA> {

    @Override
    public MFA deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext
        jsonDeserializationContext) throws JsonParseException {
        if (jsonElement.isJsonNull()) {
            return MFA.UNKNOWN;
        } else {
            return jsonElement.getAsBoolean() ? MFA.USED : MFA.NOT_USED;
        }
    }
}

但是,似乎我的反序列化实现从未被调用,我试图调试它但没有达到断点。如果响应包含该字段的值true,则将其反序列化为正确的枚举表示。falsemfa

我的方法对这个问题是否正确?如果是这样,我在这里错过了什么?

标签: javajsongsondeserialization

解决方案


好像是这样实现的,所以不会调用自定义的反序列化逻辑:

@Override public T read(JsonReader in) throws IOException {
    if (deserializer == null) {
      return delegate().read(in);
    }
    JsonElement value = Streams.parse(in);
    if (value.isJsonNull()) {
      return null;
    }
    return deserializer.deserialize(value, typeToken.getType(), context);
  }

推荐阅读