在傑克遜,可以在POJO上使用JsonSerialize註釋以防止空對象被序列化(@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL))。但是,原始元素不能設置爲null,所以此註釋對於像int沒有被觸及並且默認爲0的東西不起作用。我如何使傑克遜不使用默認值序列化基元
是否有一個註釋允許我說「對於這個類,不要序列化原語,除非它們與默認值不同「或者」對於這個字段,如果它的值是X,不要序列化它「?
在傑克遜,可以在POJO上使用JsonSerialize註釋以防止空對象被序列化(@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL))。但是,原始元素不能設置爲null,所以此註釋對於像int沒有被觸及並且默認爲0的東西不起作用。我如何使傑克遜不使用默認值序列化基元
是否有一個註釋允許我說「對於這個類,不要序列化原語,除非它們與默認值不同「或者」對於這個字段,如果它的值是X,不要序列化它「?
如果」重新使用最近版本的傑克遜,你可以使用JsonInclude.Include.NON_DEFAULT
這應該適用於基元。
對這個缺點的方法是,一個bean屬性設置爲默認值不會有任何效果和性能仍然不會被包括:
@JsonInclude(Include.NON_DEFAULT)
public class Bean {
private int val;
public int getVal() { return val; }
public void setVal(int val) { this.val = val; }
}
Bean b = new Bean();
b.setVal(0);
new ObjectMapper().writeValueAsString(b); // "{}"
這就是我一直在尋找的!我的版本需要多長時間? – galactoise
檢查你的'JsonSerialize.Inclusion'或'JsonInclude.Include'(如果使用Jackson 2.x)枚舉'NON_DEFAULT'選項,它看起來好像比我想象的要長 – HiJon89
事實上,在Java中,類加載器將設置爲所有未初始化的基本屬性(int = 0,boolean = false等)的默認值,因此您無法區分它們與由你的應用。在我看來,你有兩個選擇:
你有沒有考慮使用自定義序列?不知道它是如何與原語一起工作的,但至少要看看它。 – atomman
這是我希望不會聽到的答案=)。到目前爲止,到目前爲止,所有的工作都非常成功,包括香草設置和JsonProperty,JsonIgnore和JsonFilter註釋。 雖然我會檢查出來,謝謝。 – galactoise