使用Gson或Jackson对JSON进行反序列化时忽略空字段

我知道在将对象序列化为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为’John’。

Gson或Jackson是否可以采用一般方式(没有特殊的TypeAdapter或类似的)?

要跳过使用TypeAdapters,我会在调用setter方法时让POJO执行null检查。

或者看看

 @JsonInclude(value = Include.NON_NULL) 

注释需要处于类级别,而不是方法级别。

 @JsonInclude(Include.NON_NULL) //or Include.NON_EMPTY, if that fits your use case public static class RequestPojo { ... } 

对于Deserialise,您可以在课程级别使用以下内容。

@JsonIgnoreProperties(ignoreUnknown = true)

在我的例子中我做的是在getter上设置一个默认值

 public class User { private Long id = 42L; private String name = "John"; public getName(){ //You can check other conditions return name == null? "John" : name; } } 

我想这对许多领域都是一种痛苦,但它适用于字段数量较少的简单情况

虽然不是最简洁的解决方案,但凭借Jackson,您可以使用自定义@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; } }