我正在使用Jersey创建一个小型的RESTful客户端,并且在支持XML和JSON编组时遇到了一些问题。
具体问题是如何对包含几个属性和通用列表的对象进行编组。
我有以下按照注释的类:
XML格式正确:
但是JSON的格式是像这样的:
具体问题是如何对包含几个属性和通用列表的对象进行编组。
我有以下按照注释的类:
@XmlRootElement
public class Block<E> {
private String headerText;
private List<E> elements;
public Block() {
}
@XmlElement
public String getHeaderText() {
return headerText;
}
@XmlElementWrapper(name = "elements")
@XmlElements({
@XmlElement(name = "element", type=Foo.class),
@XmlElement(name = "element", type=Bar.class)
})
public List<E> getElements() {
return elements;
}
}
XML格式正确:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<block>
<elements>
<element>
<id>1</id>
<title>Title01</title>
</element>
<element>
<id>2</id>>
<title>Title02</title>
</element>
</elements>
<headerText>FooBarHeader</headerText>
</block>
但是JSON的格式是像这样的:
{
-elements : {
-element: [
- {
id : 1
title : "Title01"
}
- {
id : 2
title : "Title02"
}
]
}
headerText : "HeaderText"
}
我当然希望在我的JSON输出中不要有"element"属性,只有elements: [{}...{}]
我已经设置了一个ContextResolver
,它创建了一个具有JSON_WRAPPER_AS_ARRAY_NAME
属性的MOXyConfig
- 对于例如List<String>
这样的情况,我只需要用@XmlElement
声明属性,而不是@XmlElements
。
有谁知道解决这个问题的方法吗?
@XmlElements
注释中的@XmlElement
注释具有不同的名称。我注意到您给它们相同的名称,这是有意为之吗?Foo
和Bar
是否属于同一继承层次结构? - bdoughan@XmlElementRef
也可能出现类似的问题。在发现您的问题之前,我已经提交了一个错误报告。不幸的是,MOXy 看起来已经处于停滞状态了。 :-( - Hein Blöd