49

com.fasterxml.jackson.databind.ObjectMapper がどのように JSON プロパティを大文字と小文字を区別しない POJO プロパティにマップできるか知っている人はいますか?

JSON 文字列:

[{"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: Can not deserialize instance of ...

JSON-String も POJO-Class も変更できません。

4

6 に答える 6

114

この動作は、Jackson 2.5.0 で導入されました。MapperFeature を使用して、大文字と小文字を区別しないようにマッパーを構成できます。ACCEPT_CASE_INSENSITIVE_PROPERTIES .

例えば ​​:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
于 2016-04-21T11:03:32.407 に答える
0

私は同じような状況にあり、マップに変換してから値を手動でコピーする必要がありました。

import com.fasterxml.jackson.core.type.TypeReference;

Map<String, String> map = 
    mapper.readValue(jsonAsString, new TypeReference<Map<String, String>>(){});
于 2015-10-27T05:41:02.987 に答える