[英]Jackson printing objects even though NON_EMPTY is set
我程序的一部分將對象轉換為YAML字符串。 下面是一個最小的示例,它產生的結果與我遇到的問題相同:
主要
ObjectMapper JSONExportMapper = new ObjectMapper(new YAMLFactory());
JSONExportMapper.setSerializationInclusion(Include.NON_NULL);
JSONExportMapper.setSerializationInclusion(Include.NON_EMPTY);
String export = JSONExportMapper.writeValueAsString(new Animals());
System.out.println(export);
動物
class Animals {
public Dog dog;
public Animals() {
this.dog = new Dog();
}
}
狗
class Dog {
public String sound = "";
}
問題:
如您所見, Dog
具有sound
屬性,它是一個空字符串。 在我的Jackson設置中,我添加了Include.NON_EMPTY
和setSerializationInclusion
,以防止這些屬性被包含在YAML中。
沒有Include.NON_EMPTY
---
dog:
sound: ""
使用Include.NON_EMPTY
---
dog: {}
問題:
即使對象完全為空,它仍然包含在YAML中,這對我來說沒有意義。 就我而言, Animals
和Dog
是庫中的類,我不應在其中更改任何代碼。
我有什么要注意的嗎? 如何從結果YAML字符串中刪除完全為空的對象?
似乎沒有開箱即用的解決方案,所以我建議您應該實現自己的序列化器
public class MyDogSerializer extends StdSerializer<Dog> {
private static final long serialVersionUID = -4796382940375974812L;
public MyDogSerializer() {
super(Dog.class);
}
@Override
public void serialize(Dog value, JsonGenerator gen, SerializerProvider serializers)
throws IOException, JsonProcessingException {
if (/** here inspect Dog value for emptiness */) {
gen.writeObject(null);
} else {
****
}
}
}
並注釋dog
財產
class Animals {
@JsonSerialize(using = MyDogSerializer.class)
public Dog dog;
public Animals() {
this.dog = new Dog();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.