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

AEM中Sling Model Exporter实现JSON非空数据选择性导出求助

Sling Model Exporter 排除JSON空值字段方案

以下是几种直接有效的实现方式,帮你过滤掉JSON输出中的null值(或字符串类型的"null"):

1. 用Jackson注解控制序列化

Sling Model Exporter默认依赖Jackson处理JSON序列化,直接在Model类上添加@JsonInclude注解即可指定只包含非空字段:

@Model(adaptables = Resource.class, adapters = Hello.class, resourceType = "your/resource/type")
@Exporter(name = ExporterConstants.SLING_MODEL_EXPORTER_NAME, extensions = "json")
@JsonInclude(JsonInclude.Include.NON_NULL) // 仅导出非null字段
public class HelloModel implements Hello {
    @Inject
    private String location;
    
    @Inject
    private String name;
    
    @Inject
    private String surname;
    
    @Inject(optional = true) // 可选字段需标记,避免注入失败
    private String phonenumber;

    // 标准getter方法
    public String getLocation() { return location; }
    public String getName() { return name; }
    public String getSurname() { return surname; }
    public String getPhonenumber() { return phonenumber; }
}

如果需要同时排除空字符串、空集合等,可改用JsonInclude.Include.NON_EMPTY。

2. 通过Exporter配置参数实现

不想修改Model类注解的话,可在@Exporter注解中直接配置Jackson序列化参数:

@Exporter(
    name = ExporterConstants.SLING_MODEL_EXPORTER_NAME,
    extensions = "json",
    options = {
        @Option(name = "jackson.serialization-inclusion", value = "non_null")
    }
)

该配置与上面的注解效果完全一致。

3. 处理字符串类型的"null"值

如果你的phonenumber字段实际存储的是字符串"null"(而非Java的null),需要在getter方法中做转换,让Jackson识别并排除:

public String getPhonenumber() {
    return "null".equals(phonenumber) ? null : phonenumber;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:27:07