Gson将JsonNull对象转换为枚举时反序列化适配器不触发问题
问题根因
你的实现思路完全正确,问题出在Gson的默认行为限制:@JsonAdapter注解默认开启nullSafe属性,当JSON字段值为null时,Gson会直接返回null,不会触发自定义反序列化器执行,所以你写的isJsonNull分支永远不会被调用。
解决方案
方案1(推荐,适配Gson 2.7及以上版本)
直接修改枚举类上的@JsonAdapter注解,关闭null安全校验即可:
@JsonAdapter(value = MFAAdapter.class, nullSafe = false) public enum MFA { UNKNOWN, USED, NOT_USED }
关闭后null值会正常传入deserialize方法,你现有的处理逻辑可以直接生效。
方案2(适配低版本Gson)
如果你的Gson版本低于2.7,不支持nullSafe参数,可以用两种方式规避:
- 方式一:在接收接口响应的实体类中,将
mfa字段的默认值设置为MFA.UNKNOWN,Gson反序列化时如果字段为null会保留默认值 - 方式二:构建Gson实例时手动注册适配器:
Gson gson = new GsonBuilder() .registerTypeAdapter(MFA.class, new MFAAdapter()) .serializeNulls() .create();
内容的提问来源于stack exchange,提问作者dtoman
相关产品推荐
相关产品推荐

