java - Jackson 将字符串反序列化为参数化映射

标签 java jackson

我有一个以下结构的 json 字符串:

{   
    "1": { ... },
    "2": { ... },
    "3": { ... }
}

其中 1、2 和 3 是标识符。

我想反序列化该字符串并将其转换为以下类型 - Map<Integer, List<MyCustomPojo>>

问题是每个值 { ... }有它自己的结构,但我需要解析它们并转换为通用结构 - MyCustomPojo .

我可以通过实现自定义反序列化器来做到这一点:

public class CustomMapDeserializer extends JsonDeserializer<Map<Integer, List<MyCustomPojo>>> {

    @Override
    public Map<Integer, List<MyCustomPojo>> deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException {
        JsonNode root = jsonParser.getCodec().readTree(jsonParser);

    // parse JsonNode and return  Map<Integer, List<MyCustomPojo>>      
}

现在我需要将此反序列化器添加到模块中,然后使用对象映射器注册它。

SimpleModule module = new SimpleModule();
module.addDeserializer(Map.class, new CustomMapDeserializer()); // can’t specify type for map
objectMapper.registerModule(module);

问题是现在它将应用于我的应用程序中的所有 Map 类。我希望它仅适用于参数化 map - Map<Integer, List<MyCustomPojo>>.

可以吗?

最佳答案

最简单的解决方案应该是创建一个继承自 Map 的新类,并在添加反序列化器时使用它

关于java - Jackson 将字符串反序列化为参数化映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47634762/

相关文章:

java - 使用 Jackson 反序列化 Xml 到列表失败

java - jackson - 在序列化时省略字段名称

java - 有什么方法可以强制执行 java 枚举值的合规性吗?

java - 分析线程转储 - sun.misc.Unsafe.park 上有很多被阻塞的线程

Java序列化

java - 如何向 Wink 客户端注册 Jackson 提供程序?

java - 在 Java 中使用 Jackson 反序列化 Json 对象

java - org.codehaus.jackson 与 com.fasterxml.jackson.core

java - 将输入字符串日期时间从不同时区转换为 UTC

Java 泛型?有标识符异常