有人知道com.fasterxml.jackson.databind.ObjectMapper如何将JSON属性映射到不区分大小写的POJO属性吗?
JSON-String:
[{“ FIRSTNAME”:“ John”,“ LASTNAME”:“ Doe”,“ DATEOFBIRTH”:“ 1980-07-16T18:25:00.000Z”]]
POJO类:
public class Person {
private String firstName;
private String lastName;
private Date dateOfBirth;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
}
测试类别:
@Test
public final void testDeserializingPersonJsonToPersonClass()
throws JsonParseException, JsonMappingException, IOException {
final String jsonAsString = "[{\"FIRSTNAME\":\"John\",\"LASTNAME\":\"Doe\",\"DATEOFBIRTH\":\"1980-07-16T18:25:00.000Z\"}]";
final ObjectMapper mapper = new ObjectMapper();
final Person person = mapper.readValue(jsonAsString, Person.class);
assertNotNull(person);
assertThat(person.getFirstName(), equalTo("John"));
}
这将导致以下错误:com.fasterxml.jackson.databind.JsonMappingException:无法反序列化...的实例]
无法同时更改JSON-String和POJO-Class。
有人知道com.fasterxml.jackson.databind.ObjectMapper如何将JSON属性映射到不区分大小写的POJO属性吗? JSON字符串:[{“ FIRSTNAME”:“ John”,“ LASTNAME”:“ Doe”,“ DATEOFBIRTH” ...
此行为在Jackson 2.5.0中引入。您可以使用MapperFeature将映射器配置为不区分大小写。ACCEPT_CASE_INSENSITIVE_PROPERTIES。
我有同样的问题,找不到解决这个问题的全球方法。但是,每个属性可以有2个setter来实现此目的:
您可以通过配置映射器来解决此问题,如@Nicolas Riousset所述。
我处于相同的情况,必须转换为地图,然后手动复制值。
另一种解决方案是指定区分大小写的JSON字段名称: