簡體   English   中英

如何使多態傑克遜序列化與地圖一起使用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM