【发布时间】:2015-08-06 16:53:22
【问题描述】:
我有一个夹具文件person.json,
{
"fistName": "John"
"lastName": "Smith"
}
我有一个名为 Person 的类
public class Person {
private String firstName;
private String lastName;
//.. getters and setters
}
我使用ObjectMapper 反序列化Person,如下所示
ObjectMapper mapper = new ObjectMapper();
Person person = mapper.readValue(new FileInputStream(new File("person.json")),Person.class);
我收到此错误,
java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
Unrecognized field "firstName" (class com.foo.Person), not marked as ignorable (2 known properties: , "first_name", "last_name"])
我在使用mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES); 时遇到同样的错误。
我的问题是为什么会出现此错误以及如何解决?
【问题讨论】:
-
为什么你认为你不应该得到这个错误?你认为
setPropertyNamingStrategy完成了什么? -
@SotiriosDelimanolis 如果我知道,我不会问这个问题。我没有设置
setPropertyNamingStrategy得到同样的错误。我会更新问题 -
重新编译。假设您的 JSON 没有当前的拼写错误,那么在删除
setPropertyNamingStrategy调用时应该没有错误,更不用说同样的错误了。 -
重新编译,JSON 没有错误。我以前使用过 ObjectMappers 并了解基础知识。令人费解的是这些下划线字段的来源。
-
它们不是字段,它们是属性。如果您使用
CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES,则该属性默认命名为firstName,即。驼峰大小写,转换为带下划线的小写,即。first_name。如果没有这种命名策略,属性(取决于你的 getter 是什么)仍然是firstName。如果没有,你正在做一些你没有向我们展示的事情。
标签: java json spring deserialization