1

我有一个用于 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 属性是(唯一)键的位置
  • 由于顺序很重要,因此这必须是 JavaLinkedHashMap

封送处理的 XML 输出(如上所示)很好。当 JAX-RS 将其输出为 JSON 时,我遇到了麻烦。

在 JSON 中,输出类似于:

{
    InputParameters : {
       Combobox : {.....},
       Radiobutton : {.......},
       Combobox : {.....},
       Combobox : {.....},
       }
}

这里的问题是:

  • InputParameters对象具有多个名为“组合框”的属性
  • 因为InputParameters是对象而不是数组,所以不表示项目的顺序

问题归结为:我可以让 JAXB 将内容输出InputParameters为(有序)数组而不是(无序)对象集吗?或者也许我应该考虑一些非常不同的方法?

所需的 JSON 输出看起来更像:

{
    InputParameters : 
      [
         {Combobox : {.....}},
         {Radiobutton : {.......}},
         {Combobox : {.....}},
         {Combobox : {.....}},
      ]
}

我正在使用 JAXB 的参考实现。

4

0 回答 0