簡體   English   中英

Gson序列化取決於字段值

[英]Gson serialization depending on field value

我有一個類似於以下的POJO:

public class MyGsonPojo {

    @Expose
    @SerializedName("value1")
    private String valueOne;

    @Expose
    @SerializedName("value2")
    private boolean valueTwo;

    @Expose
    @SerializedName("value3")
    private int valueThree;

    // Getters and other stuff here
}

問題是必須將此對象序列化為json主體以調用服務器。 某些字段對於請求是可選的,如果我甚至使用默認值和空值發送它,則API會以不同的方式響應(不幸的是,更改api不是一種選擇)。

所以基本上我需要從序列化中排除字段,如果它們中的任何一個被設置為默認值。 例如,如果字段valueOnenull則生成的json應為:

{
    "value2" : true,
    "value3" : 2
}

任何想法如何使這成為一個無痛的努力? 我不想手動構建json體。

任何幫助都會很棒。 謝謝你的建議。

要遵循的步驟:

我已在此處的相同上下文中發布了示例代碼:

選項1)使用TypeAdapter,請參閱此處接受的答案:

選項2)如果使用Jackson而不是gson是可能的,你可以在getter上而不是在字段上注釋/序列化,並將你的邏輯用於返回getter中“default values”所需的任何內容。

//won't get serialized because it's private 
private String valueOne;
...
@JsonSerialize
String getValueOne(){
   if (valueOne == null) return "true"
   else...
}

您還可以在類的頂部使用單個@JsonInclude(Include.NON_NULL)@JsonInclude(Include.NON_EMPTY)注釋,以防止任何null或空字段被序列化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM