2014-06-27 57 views
5

如何在所有序列化對象中包含類名?例如。將「_class:'MyClass'」添加到輸出值。是否有一些全球性的設置?我不想添加任何註釋pojo類。包含傑克遜序列化的所有對象中的類名稱

我使用它與spring4 webmvc @ResponseBody(只有JSON格式)。

+0

Spring使用傑克遜在默認情況下,因此檢查項目傑克遜:https://github.com/FasterXML/jackson-databind我做不到找到任何東西雖然 –

回答

9

您需要使用@JsonTypeInfo批註註釋您的類型,並配置應如何序列化類型信息。請參閱this page以供參考。

例子:

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

輸出:

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

多一點人類可讀的類名,你可以使用「JsonTypeInfo.Id.NAME」 – Calebj