我有一个 Java 类 MyPojo
我有兴趣从 JSON 反序列化。我配置了一个特殊的 MixIn 类 MyPojoDeMixIn
来帮助我进行反序列化。 MyPojo
只有 int
和 String
实例变量与适当的getter和setter相结合。 MyPojoDeMixIn
看起来像这样:
public abstract class MyPojoDeMixIn {
MyPojoDeMixIn(
@JsonProperty("JsonName1") int prop1,
@JsonProperty("JsonName2") int prop2,
@JsonProperty("JsonName3") String prop3) {}
}
在我的测试客户端中,我执行以下操作,但当然它在编译时不起作用,因为有一个 JsonMappingException
与类型不匹配相关。
ObjectMapper m = new ObjectMapper();
m.getDeserializationConfig().addMixInAnnotations(MyPojo.class,MyPojoDeMixIn.class);
try { ArrayList<MyPojo> arrayOfPojo = m.readValue(response, MyPojo.class); }
catch (Exception e) { System.out.println(e) }
我知道我可以通过创建一个只有 ArrayList<MyPojo>
的“响应”对象来缓解这个问题,但是我将不得不为我想要返回的每一个类型创建这些有点无用的对象。
我还在线查看了 JacksonInFiveMinutes ,但很难理解有关 Map<A,B>
的内容以及它与我的问题的关系。如果您不知道,我是 Java 的新手并且来自 Obj-C 背景。他们特别提到:
除了绑定到 POJO 和“简单”类型之外,还有一种变体:绑定到通用(类型化)容器。由于所谓的类型擦除(Java 使用它以某种向后兼容的方式实现泛型),这种情况需要特殊处理,这会阻止您使用像 Collection.class 这样的东西(它不会编译)。
因此,如果您想将数据绑定到 Map 中,则需要使用:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
如何直接反序列化为 ArrayList
?
原文由 tacos_tacos_tacos 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用
TypeReference
包装器直接反序列化为列表。示例方法:并因此使用:
类型参考 Javadoc