Reputation: 4380
I have a POJO that is similar to:
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
}
The issue is that this object has to be serialized into a json body for a call to the server. Some fields are optional for the request and if I even send it with default and null values, the API responds differently (Unfortunately changing the api is not an option).
So basically I need to exclude fields from serialization if any of them is set to a default value. For example if the field valueOne
is null
the resulting json should be:
{
"value2" : true,
"value3" : 2
}
Any idea how to make this a painless effort? I wouldn't want to build the json body manually.
Any help would be great. Thank you in advice.
Upvotes: 4
Views: 4034
Reputation: 46841
Map<String,Object>
using Gson#fromJson()null
I have already posted the sample code in the same context here:
Upvotes: 3
Reputation: 32680
Option 1) Use a TypeAdapter, see accepted answer here:
Option 2) If using Jackson instead of gson is a possibility, you can annotate/serialize on getters instead of on fields, and put your logic for returning whatever you need for "default values" in your getters.
//won't get serialized because it's private
private String valueOne;
...
@JsonSerialize
String getValueOne(){
if (valueOne == null) return "true"
else...
}
You could also use a single @JsonInclude(Include.NON_NULL)
or @JsonInclude(Include.NON_EMPTY)
annotation at the top of your class to prevent any null or empty fields from being serialized.
Upvotes: 3