2014-06-27 2 views
5

Wie kann der Klassenname in alle serialisierten Objekte eingeschlossen werden? Z.B. Hinzufügen von "_class: 'MyClass'" zum Ausgabewert. Gibt es dafür eine globale Einstellung? Ich möchte keine Kommentare zu Pojo-Klassen hinzufügen.Klassenname in allen von jackson serialisierten Objekten enthalten

Ich verwende es mit spring4 webmvc @ResponseBody (nur JSON-Format).

+0

Spring verwendet Jackson standardmäßig so überprüfen Sie die Jackson Projekt: https://github.com/FasterXML/jackson-databind konnte ich nicht finden Sie alles auf den ersten Blick obwohl –

Antwort

9

Sie müssen Ihren Typ mit der Anmerkung @JsonTypeInfo annotieren und konfigurieren, wie die Typinformationen serialisiert werden sollen. Siehe this page als Referenz.

Beispiel:

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)); 
    } 
} 

Ausgang:

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

Für ein bisschen mehr ein menschlich lesbarer Klassenname können Sie "JsonTypeInfo.Id.NAME" verwenden – Calebj

Verwandte Themen