在解析从我们的一个RESTful Web服务接收到的JSON字符串时,我收到此错误“线程“ main”中的异常com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“人”(类Hello $ Person),不是标记为“可忽略” 。
经过一番研究,我发现这是在Java应用程序中使用Jackson开源库解析JSON文档时的常见错误之一。 错误消息说在我们的例子中,它找不到合适的属性名称“ person”,让我们首先看一下我们要解析的JSON,我们用来表示JSON文档的类和错误。消息本身。
错误信息:
Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:Unrecognized field "person" (class Hello$Person), not marked as ignorable (4 known properties: , "id", "city", "name", "phone"])
错误消息指出,它可以在Person类中找到ID,城市,名称和电话属性,但无法找到“ person”字段。
我们的POJO类如下所示:
class Person{
private int id;
private String name;
private String city;
private long phone;
.....
}
和JSON字符串:
{
"person": [
{
"id": "11",
"name": "John",
"city": "NewYork",
"phone": 7647388372
}
]
}
如果仔细看,“ person”字段指向JSON数组而不是对象,这意味着它不能直接映射到person类。
如何解决这个问题呢
以下是解决此问题并摆脱此错误的步骤:
1)配置encunger未知属性时,杰克逊的ObjectMapper不会失败
您可以通过禁用ObjectMapper的D eserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
属性来执行此操作,如下所示:
// Jackson code to convert JSON String to Java object
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
Person p = objectMapper.readValue(JSON, Person.class);
System.out.println(p);
现在,错误将消失,但是输出不是您期望的,它将输出以下内容:
Person [id=0, name=null, city=null, phone=0]
您可以看到Person
类没有正确创建,即使JSON String包含其值,相关属性也为null。
原因是JSON String包含一个JSON数组 ,person字段指向一个数组,而Person
类中没有对应于该字段的字段。
为了正确地解析JSON字符串,