2014-06-27 4 views
5

Come includere il nome classe in tutti gli oggetti serializzati? Per esempio. aggiungendo "_class: 'MyClass'" al valore di output. C'è qualche impostazione globale per questo? Non voglio aggiungere alcuna annotazione alle classi pojo.include il nome classe in tutti gli oggetti serializzati da jackson

Lo sto usando con spring4 webmvc @ResponseBody (solo in formato json).

+0

Spring usa Jackson per impostazione predefinita, in modo da controllare il progetto Jackson: https://github.com/FasterXML/jackson-databind non ho potuto trovare qualcosa a prima vista però –

risposta

9

È necessario aggiungere annotazioni al proprio tipo con l'annotazione @JsonTypeInfo e configurare la modalità di serializzazione delle informazioni sul tipo. Consultare this page come riferimento.

Esempio:

public class JacksonClassInfo { 
    @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "__class") 
    public static class Bean { 
     public final String field; 

     @JsonCreator 
     public Bean(@JsonProperty("field") String field) { 
      this.field = field; 
     } 

     @Override 
     public String toString() { 
      return "Bean{" + 
        "field='" + field + '\'' + 
        '}'; 
     } 
    } 

    public static void main(String[] args) throws IOException { 
     Bean bean = new Bean("value"); 
     ObjectMapper mapper = new ObjectMapper(); 
     String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(bean); 
     System.out.println(json); 
     System.out.println(mapper.readValue(json, Bean.class)); 
    } 
} 

uscita:

{ 
    "__class" : "stackoverflow.JacksonClassInfo$Bean", 
    "field" : "value" 
} 
Bean{field='value'} 
+0

Per un po 'più di un nome di classe leggibile è possibile utilizzare "JsonTypeInfo.Id.NAME" – Calebj

Problemi correlati