web-dev-qa-db-fra.com

Ignorer les propriétés manquantes lors de la désérialisation JSON de Jackson dans Java

Dans l'exemple

class Person {
   String name;
   int age;
}

Si l'objet JSON a une propriété manquante 'age',

{
  name : John
}

Person person = objectMapper.readValue(jsonFileReader, Person.class);

il jette un JsonMappingException disant qu'il ne peut pas se désérialiser. Existe-t-il un annotation pour ignorer les champs manquants lors de la désérialisation?

Merci

40
user379151

Je pense que ce que tu veux c'est

@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class Person {
  ...
}

c'est la manière Jackson 1.x. Je pense qu'il y a une nouvelle manière dans 2.x. Quelque chose comme

@JsonInclude(Include.NON_NULL)
public class Person {
  ...
}

Cela indiquera à Jackson de ne sérialiser que les valeurs non nulles et de ne pas se plaindre lors de la désérialisation d'une valeur manquante. Je pense que cela va simplement le mettre sur Java par défaut.

46
pedorro

@JsonIgnoreProperties(ignoreUnknown = true) au niveau de la classe a fonctionné pour moi.

75
Gustavo Matias

L’approche basée sur les annotations est un meilleur moyen d’ignorer mais si nécessaire. Le mode manuel de désérialisation:

ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Person       person = mapper.readValue(jsonFileReader, Person.class);
22
Fırat KÜÇÜK

Les versions modernes (2.9.6) des bibliothèques de Jackson ignoreront par défaut les propriétés de créateur manquantes. Toutefois, si la configuration ObjectMapper est définie sur:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES, true);

Vous obtiendrez alors une erreur de désérialisation si l'une des propriétés est manquante.

4
Moisés
1
drembert