【发布时间】:2012-04-07 10:26:03
【问题描述】:
我有一个 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<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
如何直接反序列化为ArrayList?
【问题讨论】: