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

如何让Jackson序列化时跳过指定字段且不修改POJO

解决Jackson动态排除POJO字段的方案

方法一:用SimpleBeanPropertyFilter实现灵活过滤

这种方案完全不需要修改原POJO,能随时切换要排除或保留的字段,最符合你的需求。

操作步骤:

  1. 先定义一个Mix-in类,用来给原POJO绑定过滤器标识(不用改动原POJO代码):
@JsonFilter("myPojoFilter")
abstract class MyPojoMixIn {}
  1. 配置ObjectMapper并应用过滤器:
ObjectMapper mapper = new ObjectMapper();
// 将Mix-in与原POJO类关联
mapper.addMixIn(MyPojo.class, MyPojoMixIn.class);

// 创建过滤器:排除sub字段,其他字段正常序列化
SimpleBeanPropertyFilter excludeSubFilter = SimpleBeanPropertyFilter.serializeAllExcept("sub");
FilterProvider filterProvider = new SimpleFilterProvider().addFilter("myPojoFilter", excludeSubFilter);

// 执行序列化
MyPojo pojo = new MyPojo();
pojo.setName("john");
pojo.setAge("21");
String json = mapper.writer(filterProvider).writeValueAsString(pojo);
// 输出结果:{"name":"john","age":"21"}

要切换过滤规则的话,直接修改过滤器即可:

  • 排除age、保留sub:
SimpleBeanPropertyFilter excludeAgeFilter = SimpleBeanPropertyFilter.serializeAllExcept("age");
  • 只保留name和sub字段:
SimpleBeanPropertyFilter onlyNameSubFilter = SimpleBeanPropertyFilter.filterOutAllExcept("name", "sub");

方法二:用ObjectWriter直接指定字段(Jackson 2.10+)

如果你的Jackson版本在2.10及以上,用ObjectWriter的exclude/include方法更简洁,连Mix-in都不需要:

ObjectMapper mapper = new ObjectMapper();
MyPojo pojo = new MyPojo();
pojo.setName("john");
pojo.setAge("21");

// 排除sub字段
String json = mapper.writer()
    .exclude(MyPojo.class, "sub")
    .writeValueAsString(pojo);

// 切换为排除age字段
String jsonExcludeAge = mapper.writer()
    .exclude(MyPojo.class, "age")
    .writeValueAsString(pojo);

方法三:全局忽略null字段(仅适用于null值场景)

如果你的需求只是去掉值为null的字段(比如示例中的sub为null),直接给ObjectMapper加全局配置即可:

ObjectMapper mapper = new ObjectMapper();
// 仅序列化非null的字段
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

MyPojo pojo = new MyPojo();
pojo.setName("john");
pojo.setAge("21");
String json = mapper.writeValueAsString(pojo);
// 输出结果:{"name":"john","age":"21"}

不过这种方式只能处理null值字段,无法灵活排除非null字段,适合特定场景使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:01:30