[英]How to make polymorphic jackson serialization working with map
我嘗試將Jackson屬性類型信息序列化,即使地圖引用了我的類型。
通過以下簡單示例:
import java.util.HashMap;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class DemoJackson {
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY)
public static abstract class Animal {}
@JsonTypeName("cat")
public static class Cat extends Animal {}
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
Cat cat = new Cat();
System.out.println(objectMapper.writeValueAsString(cat));
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("data", cat);
System.out.println(objectMapper.writeValueAsString(map));
}
}
我得到:
{"@type":"cat"}
{"data":{}}
但我想擁有:
{"@type":"cat"}
{"data":{"@type":"cat"}}
可能嗎? 怎么做?
我已經嘗試過enableDefaultTyping
但我得到:
{"@type":"cat"}
{"data":["DemoJackson$Cat",{}]}
當您直接序列化映射時(如您所做的那樣),由於通用類型,對象映射器需要有關映射內容的類型信息。 請參考“ 多態類型處理”維基頁面的第5.1章。
在序列化動物地圖時傳遞類型參考信息的示例。
objectMapper.writerWithType(new TypeReference<Map<String, Animal>>() {})
.writeValueAsString(map)
輸出:
{"@type":"cat"}
{"data":{"@type":"cat"}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.