最佳答案
我有一个 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>
的“ Response”对象来缓解这个问题,但是之后我必须为我想要返回的每个类型创建这些有点无用的对象。
我也在网上看了看 杰克逊五分钟,但是很难理解关于 Map<A,B>
的东西,以及它是如何与我的问题联系起来的。如果您看不出来,那么我对 Java 完全是新手,并且具有 Obj-C 背景。他们特别提到:
除了绑定到 POJO 和“简单”类型之外,还有一种绑定 附加变体: 绑定到通用(类型化)容器的变体。 由于所谓的类型擦除,这种情况需要特殊处理 (Java 用来实现向后兼容的泛型 方法) ,这可以防止您使用类似 Class (不编译)。
因此,如果你想把数据绑定到 Map 中,你需要使用:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
如何直接反序列化到 ArrayList
?