我有一个用于UI控件的XML架构,其外观类似于以下XML
<InputParameters>
<Combobox name="Combo1">...</Combobox>
<Radiobutton name="Radio1">...</Radiobutton>
<Combobox name="Combo2">...</Combobox>
<Combobox name="Combo2">...</Combobox>
</InputParameters>
以下是InputParameters
(另一个JAXB元素中的字段)的声明方式:
@XmlElementWrapper(name="InputParameters")
@XmlElementRefs(
{
@XmlElementRef(name="Combobox", type=ComboboxJAXB.class),
@XmlElementRef(name="RadioButtonGroup", type=RadioButtonGroup.class)
}
)
protected List<? extends InputComponent> inputParameters;
这里有几个要点:
InputParameters
中的项目顺序非常重要Combobox
和Radiobutton
在架构中都具有相同的替换组头(InputComponent
)也可能值得观察:
InputParameters
可以(而且)被认为是Map
,其中@name属性是(唯一)键LinkedHashMap
编组的XML输出(如上所示)很好。我遇到麻烦的地方是JAX-RS将其输出为JSON。
在JSON中,输出类似于:
{
InputParameters : {
Combobox : {.....},
Radiobutton : {.......},
Combobox : {.....},
Combobox : {.....},
}
}
这里的问题是:
InputParameters
对象有多个名为“Combobox”的属性InputParameters
是一个对象而不是一个数组,所以没有表示项目的顺序问题归结为:我可以让JAXB输出InputParameters
的内容作为(有序)数组而不是(无序)对象集吗?或许我应该考虑一些非常不同的方法?
所需的JSON输出看起来更像:
{
InputParameters :
[
{Combobox : {.....}},
{Radiobutton : {.......}},
{Combobox : {.....}},
{Combobox : {.....}},
]
}
我正在使用JAXB的参考实现。