小编Sco*_*ott的帖子

JAXB用于为JSON或XML自然返回的列表

我正在使用MOXy和Jersey实现一个RESTful API,并希望自然地为JSON和XML返回列表,我的意思是XML包含整个集合的元素标记以及集合项,而JSON包含仅用于集合的标记.

例如,我想返回一个"组织"资源,其中包含设施和位置的嵌套列表.作为XML:

<organisation>
  <id>1</id>
  <name>XYZ</name>
  <facilities>
    <facility>
      <id>1</id>
      <text>Telephone</text>
    </facility>
    <facility>
      <id>3</id>
      <text>Whiteboard</text>
    </facility>
  </facilities>
  <locations>
    <location>
      <id>1</id>
      <kind>REGION</kind>
      <name>London</name>
    </location>
    <location>
      <id>2</id>
      <kind>REGION</kind>
      <name>Manchester</name>
    </location>
  </locations>
</organisation>
Run Code Online (Sandbox Code Playgroud)

而作为JSON:

{
  "id": 1,
  "name": "XYZ",
  "facilities": [
    {
      "id": 1,
      "text": "Telephone"
    },
    {
      "id": 3,
      "text": "Whiteboard"
    }
  ],
  "locations": [
    {
      "id": 1,
      "kind": "REGION",
      "name": "London"
    },
    {
      "id": 2,
      "kind": "REGION",
      "name": "Manchester"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我似乎无法获得允许我为XML和JSON返回这样的输出的代码库.如果我使用一个类来包装嵌套列表,那么XML看起来是正确的但不是JSON(参见下面的"ExternalFacilities").如果我将嵌套列表定义为ArrayList子类,则JSON显示正确但不是XML(请参阅下面的"ExternalLocations").

XML示例显示"设施"列表正确但不是"位置"

看到没有包含"位置"列表的XML元素(就像"设施"一样),并且每个位置都有一个复数元素名称.

<organisation>
  <id>1</id>
  <name>XYZ</name>
  <facilities>
    <facility> …
Run Code Online (Sandbox Code Playgroud)

java xml json moxy

8
推荐指数
1
解决办法
6263
查看次数

标签 统计

java ×1

json ×1

moxy ×1

xml ×1