我有一个用于 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 属性是(唯一)键的位置- 由于顺序很重要,因此这必须是 Java
LinkedHashMap
封送处理的 XML 输出(如上所示)很好。当 JAX-RS 将其输出为 JSON 时,我遇到了麻烦。
在 JSON 中,输出类似于:
{
InputParameters : {
Combobox : {.....},
Radiobutton : {.......},
Combobox : {.....},
Combobox : {.....},
}
}
这里的问题是:
- 该
InputParameters
对象具有多个名为“组合框”的属性 - 因为
InputParameters
是对象而不是数组,所以不表示项目的顺序
问题归结为:我可以让 JAXB 将内容输出InputParameters
为(有序)数组而不是(无序)对象集吗?或者也许我应该考虑一些非常不同的方法?
所需的 JSON 输出看起来更像:
{
InputParameters :
[
{Combobox : {.....}},
{Radiobutton : {.......}},
{Combobox : {.....}},
{Combobox : {.....}},
]
}
我正在使用 JAXB 的参考实现。