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

如何为不同子类单独配置Jackson ObjectMapper的序列化包含规则

解决方案

可以通过Jackson的**混合注解(Mixin)**能力实现需求,该特性支持在不修改目标类源代码的前提下,为指定类动态绑定注解配置,完美匹配你无法直接修改子类加注解的场景。


实现步骤

1. 定义Mixin绑定规则

创建两个空接口作为注解承载类,分别绑定对应序列化规则:

// 绑定NON_NULL规则,对应MyNonNullClass
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public interface NonNullMixin {}

// 绑定ALWAYS规则,对应MyAlwaysClass
@JsonSerialize(include = JsonSerialize.Inclusion.ALWAYS)
public interface AlwaysMixin {}

2. 配置ObjectMapper

将Mixin和目标类绑定,类级别的Mixin配置优先级高于全局配置,不需要额外设置全局统一的setSerializationInclusion规则:

ObjectMapper om = new ObjectMapper();
om.disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);
// 绑定Mixin和目标类
om.addMixIn(MyNonNullClass.class, NonNullMixin.class);
om.addMixIn(MyAlwaysClass.class, AlwaysMixin.class);
om.registerSubtypes(MyNonNullClass.class, MyAlwaysClass.class);

高版本Jackson适配说明

如果你使用的是Jackson 2.x及以上版本,JsonSerialize.Inclusion已被官方废弃,推荐替换为JsonInclude注解,Mixin调整为如下写法:

import com.fasterxml.jackson.annotation.JsonInclude;

@JsonInclude(JsonInclude.Include.NON_NULL)
public interface NonNullMixin {}

@JsonInclude(JsonInclude.Include.ALWAYS)
public interface AlwaysMixin {}

注意事项

  • 你提供的类定义存在笔误,第二个类的类名重复定义为MyNonNullClass,请修正为public class MyAlwaysClass {}避免编译错误。
  • 如果需要批量处理多组类的序列化规则,可以自定义SimpleModule批量注册Mixin,适合规则较多的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:45:01