Jackson 序列化 YAML 的空值可选
Jackson serialising Optional with null value for YAML
目前我正在使用 YAMLFactory 配置 ObjectMapper
序列化和反序列化 Pojos <=> YAML
,但是它在序列化中写入 null
值,尽管尝试了通常的技巧Jackson
.
在 class 级别或字段级别上使用 @JsonInclude(JsonInclude.Include.NON_NULL)
注释没有影响。我也试过用 @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
注释 classes 也没有影响。使用 YAMLFactory
?
时如何实现这一点
我找到了一个类似的 question 但用例似乎不一样。明确地说,我试图完全省略该字段。
编辑:这是一个示例(我也在使用 Lombok
)
@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);
}
}
序列化时:
Properties:
QueueName: 471416d1-3643-4d5a-a033-65f22757dcaf-chargeback-paypal-ingestion-ingest_dispute
RedrivePolicy: null
ObjectMapper 配置:
ObjectMapper mapper = new ObjectMapper(new YAMLFactory().enable(YAMLGenerator.Feature.MINIMIZE_QUOTES));
mapper.registerModule(new Jdk8Module());
getRedrivePolicy
getter方法总是returnsnot-null
对象,即便如此,Optional
可以引用null
。在这种情况下,您应该跳过 empty
个对象。 Optional
和 null
被认为是空的,我们可以使用 JsonInclude.Include.NON_EMPTY
作为它。您可以将 @JsonInclude(JsonInclude.Include.NON_NULL)
保持在 class 级别,并仅针对给定的 getter:
添加 NON_EMPTY
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public Optional<Object> getRedrivePolicy() {
return Optional.ofNullable(redrivePolicy);
}
目前我正在使用 YAMLFactory 配置 ObjectMapper
序列化和反序列化 Pojos <=> YAML
,但是它在序列化中写入 null
值,尽管尝试了通常的技巧Jackson
.
在 class 级别或字段级别上使用 @JsonInclude(JsonInclude.Include.NON_NULL)
注释没有影响。我也试过用 @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
注释 classes 也没有影响。使用 YAMLFactory
?
我找到了一个类似的 question 但用例似乎不一样。明确地说,我试图完全省略该字段。
编辑:这是一个示例(我也在使用 Lombok
)
@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);
}
}
序列化时:
Properties:
QueueName: 471416d1-3643-4d5a-a033-65f22757dcaf-chargeback-paypal-ingestion-ingest_dispute
RedrivePolicy: null
ObjectMapper 配置:
ObjectMapper mapper = new ObjectMapper(new YAMLFactory().enable(YAMLGenerator.Feature.MINIMIZE_QUOTES));
mapper.registerModule(new Jdk8Module());
getRedrivePolicy
getter方法总是returnsnot-null
对象,即便如此,Optional
可以引用null
。在这种情况下,您应该跳过 empty
个对象。 Optional
和 null
被认为是空的,我们可以使用 JsonInclude.Include.NON_EMPTY
作为它。您可以将 @JsonInclude(JsonInclude.Include.NON_NULL)
保持在 class 级别,并仅针对给定的 getter:
NON_EMPTY
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public Optional<Object> getRedrivePolicy() {
return Optional.ofNullable(redrivePolicy);
}