【问题标题】:Jackson JSON deserialization using static factory/parser method使用静态工厂/解析器方法的杰克逊 JSON 反序列化
【发布时间】:2021-08-10 16:28:45
【问题描述】:

我需要反序列化以下内容(来自 JSON 输入):

class Container {
    M1 first;
    M2 second;
}

问题是我无法控制 M1 和 M2,但这些类提供了一些方法:返回 M1 对象的 M1.fromJson(String input) 和返回 M2 对象的 M2.fromJson(String input) .我想使用这些方法。

我怎样才能做到这一点?

【问题讨论】:

    标签: java json spring parsing jackson


    【解决方案1】:

    您可以将您的字符串反序列化为Map<String, Map>,然后手动调用M1.fromJsonM2.fromJson 来构建您的Container,如下所示:

    // You can use any json deserializer that you like insteaf of faster jackson
    Map<String, Map> map = objectMapper.readValue(json);
    
    Container container = new Container();
    container.setFirst(M1.fromJson(map.get("m1")));
    container.setSecond(M2.fromJson(map.get("m2")));
    
    ... // Use container as needed
    

    【讨论】:

    • 也许我过分简化了这个例子,但Container 是一个更大的数据类型的一部分,其中包含一些字符串等字段。如果其中没有包含 M1、M2 类型的 Container 字段,则该数据类型可以通过一次调用 objectMapper.readValue(...) 轻松反序列化。是否有可能为 MX 类型编写一个 JsonDeserializer,以便可以将它们反序列化为任何数据类型的一部分(无需手动关心 m1、m2)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    相关资源
    最近更新 更多