JSON insensible à la casse à la cartographie POJO sans changer le POJO
Personne ne sait comment com.fasterxml.jackson.databind.ObjectMapper est capable de carte JSON propriétés de POJO propriétés insensible à la casse?
JSON-Chaîne:
[{"PRENOM":"Jean","LASTNAME":"Martin","DATEOFBIRTH":"1980-07-16T18:25:00.000 Z"}]
POJO-Catégorie:
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-Catégorie:
@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"));
}
Cela se termine en erreur suivant:
com.fasterxml.jackson.databind.JsonMappingException: ne Peut pas désérialiser instance de ...
Il n'est pas possible de modifier ni JSON String ni POJO de Classe.
source d'informationauteur Mark Fellner
Vous devez vous connecter pour publier un commentaire.
Ce comportement a été introduit dans Jackson 2.5.0. Vous pouvez configurer le mappeur à être sensible à la casse à l'aide de MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES.
Par exemple :
J'ai eu le même problème et impossible de trouver une façon globale de la résolution de ce. Cependant, vous pouvez avoir 2 setters par propriété pour obtenir ceci:
Pas élégant, mais fonctionne pour les majuscules et les minuscules champs json. Vous pouvez aussi essayer la solution mentionnée ici mais cela pourrait avoir une surcharge de performance
J'étais dans le même genre de situation et a dû se convertir à une carte, puis copiez les valeurs manuellement.