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

Jackson反序列化时将父类变量纳入JSONObject是否无需自定义序列化器?

无需自定义Serializer的实现方案

当然可以不用写自定义序列化器,借助Jackson内置的注解就能实现需求,以下是两种直接可行的方案:

方案一:通过Getter方法包装父类字段

在ParentResponse里新增一个返回自身(父类实例)的Getter方法,给这个方法标记@JsonProperty("responseInfo"),同时把父类的status字段在子类里通过@JsonIgnore隐藏掉,避免平级输出:

public class DefaultResponse {
    private String status;
    // 标准的getter、setter方法
}

public class ParentResponse extends DefaultResponse {
    @JsonIgnore
    @Override
    public String getStatus() {
        return super.getStatus();
    }

    @JsonProperty("responseInfo")
    public DefaultResponse getResponseInfo() {
        return this;
    }
}

序列化ParentResponse实例时,就会输出你要的{"responseInfo":{"status":"success"}}格式。

方案二:直接包装父类实例(适合无法覆盖Getter的场景)

如果不想覆盖父类的Getter方法,可以在ParentResponse里定义一个方法,手动组装出DefaultResponse实例并返回,同时给这个方法加@JsonProperty("responseInfo"),再把父类的status字段标记为@JsonIgnore:

public class ParentResponse extends DefaultResponse {
    // 如果能修改父类,直接给DefaultResponse的status字段加@JsonIgnore更省事
    @JsonIgnore
    @Override
    public String getStatus() {
        return super.getStatus();
    }

    @JsonProperty("responseInfo")
    public DefaultResponse getResponseInfo() {
        DefaultResponse wrapper = new DefaultResponse();
        wrapper.setStatus(super.getStatus());
        return wrapper;
    }
}

这两种方法都完全依赖Jackson原生注解,不需要编写任何自定义序列化器,就能实现父类字段嵌套到指定键名下的效果。

内容的提问来源于stack exchange,提问作者Manivannan R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:05:38