I know there's lots of questions about skipping fields with a null value when serializing objects to JSON.
I want to skip / ignore fields with null values when deserializing JSON to an object.
Consider the class
public class User {
Long id = 42L;
String name = "John";
}
and the JSON string
{"id":1,"name":null}
When doing
User user = gson.fromJson(json, User.class)
I want user.id
to be '1' and user.name
to be 'John'.
Is this possible with either Gson or Jackson in a general fashion (without special TypeAdapter
s or similar)?
What i did in my case is to set a default value on the getter
public class User {
private Long id = 42L;
private String name = "John";
public getName(){
//You can check other conditions
return name == null? "John" : name;
}
}
I guess this will be a pain for many fields but it works in the simple case of less number of fields
To skip using TypeAdapters, I'd make the POJO do a null check when the setter method is called.
Or look at
@JsonInclude(value = Include.NON_NULL)
The annotation needs to be at Class level, not method level.
@JsonInclude(Include.NON_NULL) //or Include.NON_EMPTY, if that fits your use case
public static class RequestPojo {
...
}
For Deserialise you can use following at class level.
@JsonIgnoreProperties(ignoreUnknown = true)
Albeit not the most concise solution, with Jackson you can handle setting the properties yourself with a custom @JsonCreator
:
public class User {
Long id = 42L;
String name = "John";
@JsonCreator
static User ofNullablesAsOptionals(
@JsonProperty("id") Long id,
@JsonProperty("name") String name) {
User user = new User();
if (id != null) user.id = id;
if (name != null) user.name = name;
return user;
}
}