不区分大小写的JSON到POJO的映射,而无需更改POJO

问题描述 投票:30回答:5

有人知道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” ...

java json data-binding case-insensitive fasterxml
5个回答
63
投票

此行为在Jackson 2.5.0中引入。您可以使用MapperFeature将映射器配置为不区分大小写。ACCEPT_CASE_INSENSITIVE_PROPERTIES


10
投票

我有同样的问题,找不到解决这个问题的全球方法。但是,每个属性可以有2个setter来实现此目的:


5
投票

您可以通过配置映射器来解决此问题,如@Nicolas Riousset所述。


0
投票

我处于相同的情况,必须转换为地图,然后手动复制值。


0
投票

另一种解决方案是指定区分大小写的JSON字段名称:

© www.soinside.com 2019 - 2024. All rights reserved.