You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:45:03