【发布时间】:2011-09-04 14:47:16
【问题描述】:
我正在尝试通过 Spring Rest 模板编组一个列表:List<Pojo> 对象。
我可以传递简单的 Pojo 对象,但我找不到任何描述如何发送 List<Pojo> 对象的文档。
Spring 正在使用 Jackson JSON 来实现 HttpMessageConverter。杰克逊文档涵盖了这一点:
除了绑定到 POJO 和 “简单”类型,有一种 附加变体:绑定到 通用(类型)容器。这个案例 由于需要特殊处理 所谓的类型擦除(Java 使用 在某种程度上实现泛型 向后兼容的方式),其中 阻止您使用类似的东西
Collection<String>.class(确实 不编译)。所以如果你想将数据绑定到一个
Map<String,User>你需要使用:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() {});其中
TypeReference只需要 通过泛型类型定义(通过 在这种情况下是任何内部类): 重要的部分是<Map<String,User>>定义类型 绑定到。
这可以在 Spring 模板中完成吗?我看了一眼代码,这让我不以为然,但也许我只是不知道一些技巧。
解决方案
由于以下有用的答案,最终的解决方案是不发送列表,而是发送一个简单地扩展列表的对象,例如:class PojoList extends ArrayList<Pojo>。 Spring 可以成功地编组这个对象,它完成与发送List<Pojo> 相同的事情,尽管它的解决方案不太干净。我还在春季为他们发布了一个 JIRA,以在他们的 HttpMessageConverter 界面中解决这个缺点。
【问题讨论】:
标签: java spring collections spring-mvc jackson