JSON: JsonMappingException en essayant de désérialiser un object avec des valeurs NULL

J’essaie de désérialiser un object contenant des propriétés null et ayant une JsonMappingException .

Ce que je fais:

 Ssortingng actual = "{\"@class\" : \"PersonResponse\"," + " \"id\" : \"PersonResponse\"," + " \"result\" : \"Ok\"," + " \"message\" : \"Send new person object to the client\"," + " \"person\" : {" + " \"id\" : 51," + " \"firstName\" : null}}"; ObjectMapper mapper = new ObjectMapper(); mapper.readValue(new SsortingngReader(json), PersonResponse.class); //EXCEPTION! 

MAIS : si jeter "firstName = null" propriété – tout fonctionne bien! Je veux dire passer la chaîne suivante:

 Ssortingng test = "{\"@class\" : \"PersonResponse\"," + " \"id\" : \"PersonResponse\"," + " \"result\" : \"Ok\"," + " \"message\" : \"Send new person object to the client\"," + " \"person\" : {" + " \"id\" : 51}}"; ObjectMapper mapper = new ObjectMapper(); mapper.readValue(new SsortingngReader(json), PersonResponse.class); //ALL WORKS FINE! 

Question : Comment éviter cette exception ou engager Jackson en ignorant les valeurs nulles lors de la sérialisation?

Jette:

Message:

 com.fasterxml.jackson.databind.MessageJsonException: com.fasterxml.jackson.databind.JsonMappingException: N/A (through reference chain: person.Create["person"]->Person["firstName"]) 

cause:

 com.fasterxml.jackson.databind.MessageJsonException: com.fasterxml.jackson.databind.JsonMappingException: N/A (through reference chain: prson.Create["person"]->Person["firstName"]) 

cause: java.lang.NullPointerException

Si vous ne souhaitez pas sérialiser null valeurs null , vous pouvez utiliser le paramètre suivant (lors de la sérialisation):

 objectMapper.setSerializationInclusion(Include.NON_NULL); 

J’espère que ceci résoudra votre problème.

Mais l’ NullPointerException vous obtenez lors de la désérialisation me semble suspecte (Jackson devrait idéalement être capable de gérer null valeurs null dans la sortie sérialisée). Pourriez-vous poster le code correspondant à la classe PersonResponse ?

Parfois, ce problème se produit lorsque vous utilisez accidentellement un type primitif comme type de retour du getter d’un champ non primitif:

 public class Item { private Float value; public float getValue() { return value; } public void setValue(Float value) { this.value = value; } } 

Notez que “float” au lieu de “Float” pour la méthode getValue (), cela peut conduire à une exception Null Pointer Exception, même si vous avez ajouté

 objectMapper.setSerializationInclusion(Include.NON_NULL); 

J’ai également fait face au même problème.

Je viens d’inclure un constructeur par défaut dans la classe de modèle avec l’autre constructeur avec parameters.

Ça a marché.

 package objmodel; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; public class CarModel { private Ssortingng company; private Ssortingng model; private Ssortingng color; private Ssortingng power; public CarModel() { } public CarModel(Ssortingng company, Ssortingng model, Ssortingng color, Ssortingng power) { this.company = company; this.model = model; this.color = color; this.power = power; } @JsonDeserialize public Ssortingng getCompany() { return company; } public void setCompany(Ssortingng company) { this.company = company; } @JsonDeserialize public Ssortingng getModel() { return model; } public void setModel(Ssortingng model) { this.model = model; } @JsonDeserialize public Ssortingng getColor() { return color; } public void setColor(Ssortingng color) { this.color = color; } @JsonDeserialize public Ssortingng getPower() { return power; } public void setPower(Ssortingng power) { this.power = power; } }