[英]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不是一種選擇)。
所以基本上我需要從序列化中排除字段,如果它們中的任何一個被設置為默認值。 例如,如果字段valueOne
為null
則生成的json應為:
{
"value2" : true,
"value3" : 2
}
任何想法如何使這成為一個無痛的努力? 我不想手動構建json體。
任何幫助都會很棒。 謝謝你的建議。
Map<String,Object>
null
的條目 我已在此處的相同上下文中發布了示例代碼:
選項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.