Jackson序列化可选,YAML为空值

问题描述

当前,我正在使用YAMLFactory来配置ObjectMapper进行序列化和反序列化Pojos <=> YAML,但是尽管尝试了{{ 1}}。

在类级别或字段级别用null进行注释没有任何影响。我也尝试了用Jackson注释类,也没有任何影响。使用@JsonInclude(JsonInclude.Include.NON_NULL)时如何实现?

我发现了类似的question,但用例似乎并不相同。为了清楚起见,我试图完全省略该字段。

编辑:这是一个示例(我也在使用@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)

YAMLFactory

序列化时:

Lombok

ObjectMapper配置:

@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class QueueProperties extends Properties {

    @JsonProperty("QueueName")
    private String queueName;

    @JsonProperty("RedrivePolicy")
    private RedrivePolicy redrivePolicy;

    public Optional<RedrivePolicy> getRedrivePolicy() {
        return Optional.ofNullable(redrivePolicy);
    }
}

解决方法

getRedrivePolicy的getter方法始终返回not-null对象,即使如此,Optional仍可以引用null。在这种情况下,您应该跳过empty个对象。 Optionalnull被认为是空的,我们可以使用JsonInclude.Include.NON_EMPTY。您可以将@JsonInclude(JsonInclude.Include.NON_NULL)保留在课程级别,并仅为给定的getter添加NON_EMPTY

@JsonInclude(JsonInclude.Include.NON_EMPTY)
public Optional<Object> getRedrivePolicy() {
    return Optional.ofNullable(redrivePolicy);
}