java - 将 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
,则将其反序列化为正确的枚举表示。false
mfa
我的方法对这个问题是否正确?如果是这样,我在这里错过了什么?
解决方案
好像是这样实现的,所以不会调用自定义的反序列化逻辑:
@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);
}
推荐阅读
- javascript - 根据页面缩放级别和 Windows 10 DPI 设置查找 devicePixelRatio
- ios - 带有核心数据的有序列表
- python-3.x - 将空格识别为 python 路径的一部分
- microsoft-graph-api - 如何从标题中获取可用的电子邮件参考 ID 以在 Microsoft Graph 查询中使用?
- .htaccess - .htaccess 重定向不指向指定文件
- python - Keras(Tensorflow) python 图像分类与分析(根系统)
- sql - Postgresql 中使用触发器的总库存
- java - 使用自定义函数模拟静态 void 方法
- asp.net-core - Asp.Net 核心 ActionFilter 上下文请求正文已处理
- python - 堆叠从 Xarray 生成的 Dask 数组的有效方法