如何告诉Jackson在布尔值为null/false时忽略它?

3

我有课

@Data
public class MyClass {
  private Boolean flag;
}

我希望将其转换为XML格式。但是,如果标志不为真,则在序列化过程中需要忽略标志字段。

因此,如果flag=true,我想要得到:

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

否则(如果flag==null或flag==false),我希望得到:
<MyClass></MyClass>

我该如何做呢?

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

1个回答

2

一个通用的解决方案是使用JsonInclude.Include.CUSTOM,如下所示:

@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 字段,那么以下方案不太通用,但可行:尝试使用 NON_NULL 覆盖 getter 方法:

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

    public Boolean getFlag() {
        return (flag != null && flag) ? true : null;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接