我的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主体。
任何帮助都会很棒。谢谢你的建议。
答案 0 :(得分:3)
Map<String,Object>
null
我已在此处的相同上下文中发布了示例代码:
答案 1 :(得分:3)
选项1)使用TypeAdapter,查看已接受的答案here:
选项2)如果使用Jackson代替gson是可能的,您可以在getter上而不是在字段上注释/序列化,并将您的逻辑用于返回 无论你在吸气剂中需要什么“默认值”。
//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)
注释,以防止序列化任何空字段或空字段。