2014-04-25 6 views
8

Ho un oggetto JSON che può contenere alcuni valori nulli. Uso ObjectMapper da com.fasterxml.jackson.databind per convertire il mio oggetto JSON come String.Abilita il metodo writeValueAsString di Object Mapper per includere valori nulli

private ObjectMapper mapper = new ObjectMapper(); 
String json = mapper.writeValueAsString(object); 

Se il mio oggetto contiene qualsiasi campo che contiene un valore nullo, allora quel campo non è incluso nella stringa che viene da writeValueAsString. Voglio che il mio ObjectMapper mi dia tutti i campi nella stringa anche se il loro valore è nullo.

Esempio:

object = {"name": "John", "id": 10} 
json = {"name": "John", "id": 10} 

object = {"name": "John", "id": null} 
json = {"name": "John"} 
+0

Potete mostrare un esempio? Jackson dovrebbe serializzare le cose a 'null'. –

+0

@SotiriosDelimanolis, viene aggiunto un esempio. – LINGS

+0

Dipende dalle annotazioni sul tipo o da come è configurato il programma di mappatura, ad esempio, consultare [questo] (http://stackoverflow.com/questions/11757487/how-to-tell-jackson-to-ignore-a-field -durante-serializzazione-se-suo-valore è nullo). –

risposta

5

Jackson devono serializzare null campi alle null per impostazione predefinita. Vedere il seguente esempio

public class Example { 

    public static void main(String... args) throws Exception { 
     ObjectMapper mapper = new ObjectMapper(); 
     mapper.configure(SerializationFeature.INDENT_OUTPUT, true); 
     String json = mapper.writeValueAsString(new Test()); 
     System.out.println(json); 
    } 

    static class Test { 
     private String help = "something"; 
     private String nope = null; 

     public String getHelp() { 
      return help; 
     } 

     public void setHelp(String help) { 
      this.help = help; 
     } 

     public String getNope() { 
      return nope; 
     } 

     public void setNope(String nope) { 
      this.nope = nope; 
     } 
    } 
} 

stampe

{ 
    "help" : "something", 
    "nope" : null 
} 

Non è necessario fare nulla di speciale.

0

Include.ALWAYS ha funzionato per me.

objectMapper.setSerializationInclusion(com.fasterxml.jackson.annotation.JsonInclude.Include.ALWAYS); 

Altri valori possibili per includere sono

  • Include.NON_DEFAULT
  • Include.NON_EMPTY
  • Include.NON_NULL
Problemi correlati