当前位置: 首页 > 知识库问答 >
问题:

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

葛浩阔
2023-03-14

我有课

@Data
public class MyClass {
  private Boolean flag;
}

并希望将其转换为XML。但是,如果flag不为true,我需要在序列化期间忽略flag字段。

因此,如果flag=true,我希望得到:

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

共有1个答案

曾歌者
2023-03-14

一般的解决方案是使用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;
    }
}
 类似资料:
  • 如果字段的值为NULL,如何将jackson配置为在序列化期间忽略该字段的值。 例如:

  • 问题内容: 如果该字段的值为null,如何配置Jackson在序列化期间忽略该字段的值。 例如: 问题答案: 要使用抑制具有空值的序列化属性,可以直接配置或使用批注: 要么: 或者,你可以在中使用,以便在值不为时显示属性。

  • 问题内容: 在反序列化过程中(据我了解,这是将JSON数据转换为Java对象的过程),我如何告诉Jackson,当它读取不包含数据的对象时,应该忽略它吗? 我正在使用Jackson 2.6.6和Spring 4.2.6 我的控制器收到的JSON数据如下: 问题是对象“ containedObject”按原样解释,并且正在实例化。因此,控制器读取此JSON数据后,它将立即生成ContainedObj

  • 问题内容: 长话短说,我的一个实体有一个GeometryCollection,当您调用“ getBoundary”时会引发异常(这是另一本书的原因,现在让我们说这是它的工作方式)。 有没有办法让我告诉Jackson不要包括那个特定的吸气剂?我知道自己拥有/控制代码时可以使用@JacksonIgnore。但是,事实并非如此,Jackson通过父对象的连续序列化结束了这一点。我在杰克逊文档中看到了一个

  • 我的控制器接收到的JSON数据如下: 问题是对象“ContainedObject”被解释为是,并且它正在被实例化。因此,只要我的控制器读取这个JSON数据,它就会生成一个ContainedObject对象类型的实例,但我需要它为空。 最简单、最快的解决方案是,在接收的JSON数据中,该值为空,如下所示: 我的实体类如下: 和包含的对象类,如下所示:

  • 然后使用这个changelog文件执行liquibase,它驻留在目录/home/changelogs中。则应用更改。然后使用相同的changelog文件再次运行liquibase。正如预期的那样,这次不应用更改。 但如果我将更改日志文件移动到/home/changelog/migration并再次运行liquibase,则应用更改。 liquibase似乎将changelog的路径包含在deci