我有一个奇怪的问题,即使用基于jaxb的json支持的jersey将空对象集合编组到json。我的对象看起来像
...
@XmlWrapper(name = "stuff") @XmlElement(name = "s")
private List<Foo> foos;
...
将此编组到json会产生预期的结果
... stuff: [{ "s": ... }, { "s": ... }] ...
除非列表为空。我希望看到
... stuff: [] ...
但是我看到了
... stuff: [null] ...
代替。 任何想法是什么问题?问题似乎与@XmlElementWrapper
注释有关,删除它我根本没有得到输出中的stuff
属性。
答案 0 :(得分:0)
您是在序列化一个空列表,还是在序列化一个未实例化的空对象?
即。我希望:
private List<Foo> foos; - would serialize to 'stuff: [null]'
我也希望:
private List<Foo> foos = new ArrayList<Foo>(); - we serialize to 'stuff: []'
如果不是这种情况,您可以随时将Jackson(与Jersey捆绑的默认JSON序列化程序)指向omit the writing of bean properties as null value.。
答案 1 :(得分:0)
我建议使用基于Jackson的POJO映射。我不确定为什么你想要那个中间的“s”,但是POJO会产生(和消耗)更简单的结构:
"stuff" : [ { ... }, { ... } ]
为此,您不需要使用POJO映射注释;只有XML处理才需要JAXB注释,因为XML没有自然的机制来区分数组和对象(与JSON不同)。
答案 2 :(得分:0)
我设法在Jersey json库中解决JSON数组和原始字段“bug”。秘密成分是JSONConfiguration和ContextResolver魔术。请参阅我的以下帖子,它有一个完整的代码示例,自定义的ContextResolver和rest Application类在初看起来可能有点模糊逻辑。
How to serialize Java primitives using Jersey REST