【问题标题】:Complex Un-Marshalling with Jersey JAX-RS (List of Lists)使用 Jersey JAX-RS 进行复杂的解组(列表列表)
【发布时间】:2015-04-28 21:42:54
【问题描述】:

我正在尝试找出从公共 API 解组某些数据的最佳方法(这意味着我无法控制如何将其序列化为 XML)。

<Show>
 <name>Buffy the Vampire Slayer</name>
 <totalseasons>7</totalseasons>
 <Episodelist>
  <Season no="1">
   <episode>...</episode>
   <episode>...</episode>
   <episode>...</episode>
   <episode>...</episode>
  </Season>
  <Season no="2">...</Season>
  <Season no="3">...</Season>
 </Episodelist>
</Show>

以上是从 ReSTful 查询返回的 XML 示例。理想情况下,我想弄清楚如何做两件事; 1) 将所有季节列表合并到一个剧集列表中,以及 2) 在解组 XML 时是否可以仅访问子元素并忽略父元素(例如,仅访问 EpisodeList,忽略 Show)?

感谢您的帮助!这是我的第一篇 SO 帖子(对编程来说还是相当新的)。

【问题讨论】:

  • 如果公共 api 提供和 xsd,您可以使用 jaxb 将 /unmarshal xml 转换为 java 对象。然后对 java 对象做你想做的事。
  • 为什么不使用 xml 解析器?
  • @rsavchenko 据我所知,他们不提供 XSD(我也不确定这对我有什么帮助)...
  • @Franky 我想我可以调查一下。我希望使用 JAX-B 来实现这一点(我在想通过使用 XmlAdapter 类)。

标签: java xml rest jersey jax-rs


【解决方案1】:

我最终创建了一些“帮助”类来提取我需要的数据。我在 EpisodeListHelper 中编写了一个 getEpisodeList 方法,它将所有剧集汇总到一个列表中。

EpisodeListHelper 类

@XmlRootElement(name="Show")
@XmlAccessorType(XmlAccessType.FIELD)
public class EpisodeListHelper {
    @XmlElementWrapper(name="Episodelist")
    @XmlElement(name="Season")
    private List<SeasonHelper> seasonList;
...
}

SeasonHelper 类

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SeasonHelper {
    @XmlElement(name="episode")
    private List<Episode> list;
...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多