Java Gson序列化取决于字段值
我的POJO类似于:Java Gson序列化取决于字段值,java,android,json,serialization,gson,Java,Android,Json,Serialization,Gson,我的POJO类似于: public class MyGsonPojo { @Expose @SerializedName("value1") private String valueOne; @Expose @SerializedName("value2") private boolean valueTwo; @Expose @SerializedName("value3") private int valueThre
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主体
任何帮助都会很好。感谢您的建议。以下步骤:
- 使用将JSON字符串转换为
Map
- 迭代映射并从映射中删除
null
- 使用从最终映射返回的JSON字符串
//won't get serialized because it's private
private String valueOne;
...
@JsonSerialize
String getValueOne(){
if (valueOne == null) return "true"
else...
}
您还可以在类的顶部使用一个
@JsonInclude(Include.NON\u NULL)
或@JsonInclude(Include.NON\u EMPTY)
注释来防止任何NULL或空字段被序列化 谢谢你的回答。不幸的是,Jackson不是一个选项(对于许多要重构的对象来说)。如果对象有10个甚至15个字段,则可以排除TypeAdapter。@SerjLotutovici“可以排除”是什么意思?解决方法是“可以排除”。我不认为有人会试图为一个包含15个字段的对象编写一个TypeAdapter,你很可能会犯错误。但是杰克逊的建议——我的下一个项目会考虑的。啊,是的,我同意你的意见,如果是这样的话。我会看看@Braj的第一个解决方案