我知道在将对象序列化为JSON时,有很多关于跳过具有空值的字段的问题。 在将JSON反序列化为对象时,我想跳过/忽略具有空值的字段。
考虑班级
public class User {
Long id = 42L;
String name = "John";
}
和JSON字符串
{"id":1,"name":null}
做的时候
User user = gson.fromJson(json, User.class)
我希望user.id
成为' 1'并user.name
成为约翰'。
Gson或Jackson是否可以采用一般方式(没有特殊的TypeAdapter
或类似方式)?
答案 0 :(得分:0)
要跳过使用TypeAdapters,我会在调用setter方法时让POJO进行空检查。
或者看看
@JsonInclude(value = Include.NON_NULL)
注释需要在Class级别,而不是方法级别。
@JsonInclude(Include.NON_NULL) //or Include.NON_EMPTY, if that fits your use case
public static class RequestPojo {
...
}
对于Deserialise,您可以在课程级别使用以下内容。
@JsonIgnoreProperties(ignoreUnknown = true)
答案 1 :(得分:0)
我在我的案例中所做的是在getter上设置默认值
public class User {
private Long id = 42L;
private String name = "John";
public getName(){
//You can check other conditions
return name == null? "John" : name;
}
}
我想这对许多领域都是一种痛苦,但它适用于字段数较少的简单情况
答案 2 :(得分:0)
虽然不是最简洁的解决方案,但凭借杰克逊,您可以使用自定义@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;
}
}