asc*_*sco 8 java json jackson gson deserialization
我知道在将对象序列化为JSON时,有很多关于跳过具有空值的字段的问题.在将JSON反序列化为对象时,我想跳过/忽略具有空值的字段.
考虑上课
public class User {
Long id = 42L;
String name = "John";
}
Run Code Online (Sandbox Code Playgroud)
和JSON字符串
{"id":1,"name":null}
Run Code Online (Sandbox Code Playgroud)
做的时候
User user = gson.fromJson(json, User.class)
Run Code Online (Sandbox Code Playgroud)
我想 user.id成为'1'并user.name成为'约翰'.
Gson或Jackson是否可以采用一般方式(没有特殊TypeAdapter的或类似的)?
很多时间过去了,但如果你像我一样遇到这个问题并且你至少使用 Jackson 2.9 那么你可以解决它的一种方法是使用JsonSetter和Nulls.SKIP:
public class User {
private Long id = 42L;
@JsonSetter(Nulls.SKIP)
private String name = "John";
... cooresponding getters and setters
}
Run Code Online (Sandbox Code Playgroud)
这样,当遇到null时,setter就不会被调用。
jef*_*ter -1
为了跳过使用 TypeAdapters,我会让 POJO 在调用 setter 方法时执行 null 检查。
或者看看
@JsonInclude(value = Include.NON_NULL)
Run Code Online (Sandbox Code Playgroud)
注释需要位于类级别,而不是方法级别。
@JsonInclude(Include.NON_NULL) //or Include.NON_EMPTY, if that fits your use case
public static class RequestPojo {
...
}
Run Code Online (Sandbox Code Playgroud)
对于反序列化,您可以在类级别使用以下内容。
@JsonIgnoreProperties(ignoreUnknown = true)