使用ObjectMapper对json字符串反序列化对象时,由于字符串中 多了一个字段,使用readValue方法时会报错,
报错演示:
public static void main(String[] args) throws JsonProcessingException, InterruptedException {
readModel();
System.out.println("---------22222222222222222-----------");
}
private static void readModel() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
// String str = "{\"name\":\"zz\",\"age\":\"55\"}";
// String str = "{\"name\":\"zz\"}";
String str = "{\"name\":\"zz\",\"age\":\"55\",\"sex\":\"55\"}";
// 注释配置就会报错
// objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
MyUser myUser = objectMapper.readValue(str, MyUser.class);
// MyUser myUser = JSON.parseObject(str, MyUser.class);
System.out.println(
myUser
);
}
报错提示
Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "sex" (class com.test.MyUser), not marked as ignorable (2 known properties: "name", "age"])
at [Source: (String)"{"name":"zz","age":"55","sex":"55"}"; line: 1, column: 32] (through reference chain: com.test.MyUser["sex"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:855)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1212)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1604)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1582)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:299)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:156)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4526)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3468)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3436)
解决方案:
需要加一行配置
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
完整:
ObjectMapper objectMapper = new ObjectMapper();
String str = "{\"name\":\"zz\",\"age\":\"55\",\"sex\":\"55\"}";
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
MyUser myUser = objectMapper.readValue(str, MyUser.class);
System.out.println(myUser);