目前我正在使用 YAMLFactory配置ObjectMapper
序列化和反序列化Pojos <=> YAML
,但是它写 null
尽管尝试了Jackson
中的常用技巧,但序列化中的值.
使用 @JsonInclude(JsonInclude.Include.NON_NULL)
进行注释对类级别或字段级别没有影响。我还尝试用 @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
注释类也没有影响。使用 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 mapper = new ObjectMapper(new YAMLFactory().enable(YAMLGenerator.Feature.MINIMIZE_QUOTES));
mapper.registerModule(new Jdk8Module());
最佳答案
getRedrivePolicy
getter 方法始终返回 not-null
对象,即使如此,Optional
也可以引用 null
。在这种情况下,您应该跳过空
对象。带有 null
的 Optional
被视为空,我们可以使用 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);
}
关于java - Jackson 序列化 可选,YAML 值为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63582778/