使用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; } }