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
相关产品推荐
相关产品推荐

