【发布时间】:2014-03-20 13:08:24
【问题描述】:
当有一个项目时,我无法控制的服务会向我发送如下所示的 JSON:
{ items: {
item: { ... }
}
...当没有项目时是这样的:
{ items: null }
...当有两个或多个项目时这样:
{ items: {
item: [
{ ... },
{ ... }
]
}
}
我相信这是因为该服务旨在生成这样的 XML:
<items>
<item>....</item>
<item>....</item>
</items>
...并将结果扔到一个 XML->JSON 转换器上,而没有过多关注结果。
使用 Jackson,我可以通过使用 DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY 配置我的 ObjectMapper 来处理 Jackson 中的“有时为空,有时为对象,有时为数组”问题。
我可以通过定义带有字段List<Item> item 的Items 类来处理两层结构。
但是,Items 类只是作为奇怪的 JSON 格式的一种解决方案。除了编写一个完整的自定义反序列化器之外,我是否可以说服杰克逊反序列化为一个对象就好像结构是:
{ items: [ { ... }, { ... } ] }
?
【问题讨论】: