如果布尔值是 null/false,如何告诉 Jackson 忽略它?

2023-12-09

我有课

@Data
public class MyClass {
  private Boolean flag;
}

并想将其转换为XML。但是,如果标志不为真,我需要在序列化期间忽略标志字段。

So if 标志=真,我想得到:

<MyClass><flag>true</flag></MyClass>

否则(如果标志 == null 或标志 == false),我想得到:

<MyClass></MyClass>

我该怎么做?

我尝试了 @JsonInclude(JsonInclude.Include.NON_NULL),但它仅适用于空值。


通用的解决方案是使用JsonInclude.Include.CUSTOM like:

@JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = TrueFilter.class)
private Boolean flag;

其中 TrueFilter 会是这样的:

public static class TrueFilter {
    @Override
    public boolean equals(Object value) {
        return !Boolean.valueOf(true).equals(value);
    }
}

也不是那么通用的解决方案,但如果您只需要处理字段flag你可以尝试用以下方法重写 getterNON_NULL所以喜欢:

@Data
public class MyClass {
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Boolean flag;

    public Boolean getFlag() {
        return (flag != null && flag) ? true : null;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果布尔值是 null/false,如何告诉 Jackson 忽略它? 的相关文章

随机推荐