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

如何让Jackson默认排除所有属性,仅显式指定包含项?

解决Jackson基类默认排除、显式指定字段序列化的问题

核心方案

通过类级别@JsonIgnore + 字段级别@JsonProperty组合实现,配合Jackson可见性配置适配Lombok场景,仅需在基类配置一次,子类无需额外修改。

基类代码调整

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.math.BigDecimal;

@JsonIgnore
public class BaseClass {
    // 显式标记需要保留的字段
    @JsonProperty
    private long usefulProperty1;

    @JsonProperty
    private BigDecimal usefulProperty2;

    @JsonProperty
    private BigDecimal usefulProperty3;

    // 所有未标记@JsonProperty的字段默认被忽略
    private int garbageProperty;
    // ... 其余200个冗余字段
}

子类代码保持原样

public class SubClass extends BaseClass {
    // 子类字段默认自动参与序列化/反序列化,无需额外注解
    private String usefulProperty1;
    private long usefulProperty2;
}

关键:Jackson ObjectMapper配置

由于使用Lombok生成Getter/Setter,需调整Jackson可见性规则,让它直接访问字段而非依赖Getter/Setter,确保字段注解生效:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.introspect.Visibility;

ObjectMapper objectMapper = new ObjectMapper();
// 配置Jackson直接操作字段,忽略Getter/Setter
objectMapper.setVisibility(
        objectMapper.getSerializationConfig().getDefaultVisibilityChecker()
                .withFieldVisibility(Visibility.ANY)
                .withGetterVisibility(Visibility.NONE)
                .withSetterVisibility(Visibility.NONE)
                .withCreatorVisibility(Visibility.NONE)
);

原理说明

  1. 类级别@JsonIgnore:指定基类所有字段默认被忽略,该规则仅作用于基类本身,不影响子类字段。
  2. 字段级别@JsonProperty:优先级高于类级别的@JsonIgnore,显式标记字段必须被包含,覆盖默认忽略规则。
  3. 可见性配置:让Jackson直接读写字段,跳过Getter/Setter,完美适配Lombok自动生成逻辑,确保字段注解直接生效。

可选优化:过滤空值

若需剔除未赋值的空字段,给基类添加@JsonInclude(JsonInclude.Include.NON_NULL)即可:

@JsonIgnore
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BaseClass {
    // ... 字段
}

注意事项

  • 避免子类与基类使用同名字段,否则序列化时会出现重复键(Jackson默认优先保留子类字段,具体行为取决于版本)。
  • 若使用Spring Boot,可通过Jackson2ObjectMapperBuilder统一配置ObjectMapper,无需手动创建实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:01:25