我有一个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) }
我知道可以通过创建一个仅包含其中一个的“ Response”对象来缓解此问题ArrayList<MyPojo>
,但是随后我将不得不为我想返回的每个单个类型创建这些有点无用的对象。
我也在线查看了JacksonInFiveMinutes,但经历了一段糟糕的时光,了解了有关这些问题Map<A,B>
及其与我的问题的关系。如果您无法确定,我是Java的新手,并且来自Obj-C背景。他们特别提到:
除了绑定到POJO和“简单”类型外,还有另一种变体:绑定到通用(类型化)容器。这种情况由于所谓的Type Erasure(类型擦除)(Java使用它以某种向后兼容的方式实现泛型)而需要特殊处理,这使您无法使用Collection.class之类的东西(不会编译)。
因此,如果要将数据绑定到地图中,则需要使用:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
我如何直接反序列化到ArrayList
?