use*_*151 41 java serialization json jackson
在示例中
class Person {
String name;
int age;
}
Run Code Online (Sandbox Code Playgroud)
如果json对象缺少属性'age',
{
name : John
}
Person person = objectMapper.readValue(jsonFileReader, Person.class);
Run Code Online (Sandbox Code Playgroud)
它抛出一个JsonMappingException,说它不能反序列化.是否有注释在反序列化期间忽略缺少的字段?
谢谢
Gus*_*ias 81
@JsonIgnoreProperties(ignoreUnknown = true)
在班级上为我工作
ped*_*rro 45
我想你想要的是什么
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class Person {
...
}
Run Code Online (Sandbox Code Playgroud)
那是Jackson 1.x的方式.我认为在2.x中有一种新的方式.就像是
@JsonInclude(Include.NON_NULL)
public class Person {
...
}
Run Code Online (Sandbox Code Playgroud)
这些将告诉Jackson只序列化非空值,并且在反序列化缺失值时不要抱怨.我认为它只会将其设置为Java默认值.
Fır*_*ÇÜK 24
基于注释的方法是忽略但是如果需要的更好方法.手动反序列化方式:
ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Person person = mapper.readValue(jsonFileReader, Person.class);
Run Code Online (Sandbox Code Playgroud)
在反序列化中,可能会发生两种情况。
我们在 JSON String 中有一个新字段,而不是在 Java Bean 中,这对于对象映射器来说是一个未知属性。要忽略未知属性,需要如下配置对象映射器配置
ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
Run Code Online (Sandbox Code Playgroud)
如果某个字段不在JSON String 中而是在 Java Bean 中,则该字段将被对象映射器视为缺失属性。为了避免因缺少属性而失败,需要按如下方式配置对象映射器配置,但这是 Jackson 库的现代版本 (2.9.6) 的默认行为。
ObjectMapper().configure(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES, false)
默认情况下,现代版本(2.9.6)的Jackson库将忽略缺少的创建者属性。但是,如果将ObjectMapper配置设置为:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES, true);
Run Code Online (Sandbox Code Playgroud)
如果缺少其中一个属性,则会收到反序列化错误。
归档时间: |
|
查看次数: |
65172 次 |
最近记录: |