我有一个以下结构的 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/