【问题标题】:JAXB and complex mapsJAXB 和复杂映射
【发布时间】:2011-03-27 04:05:38
【问题描述】:

我正在尝试通过 JAXB 编组/解组 Map<String, Map<String, Serializable>>。有两个问题: 1. JAXB 无法处理复杂的地图。 2. JAXB 不能处理接口(在这个上下文中是Serializable)。 应该如何通过 JAXB 获得它?

【问题讨论】:

  • 问问自己这个问题:您希望看到什么样的 XML 作为输出? XML 不太擅长表示地图...
  • @skaffman:只要键和值可以在 XML 中表示,XML 就可以很好地表示映射:..... ....
  • @richj:我认为这是糟糕的 XML 建模。噪音太大,信号不够。
  • 我的观点是,映射可以表示为一组键值对,如果键和值都可以在 XML 中表示,那么在 XML 中表示这样的集合并不难。因此,要回答您在第一条评论中提出的问题,这是我希望看到的 XML 的基本形式作为输出。它可能会被优化成更紧凑的东西,也可能不会。

标签: java jaxb


【解决方案1】:

据我所知,XML 不支持 Map 类型。所以你可以尝试像这样使用

<item key="somekey" value="hello" />

但您需要自己检查重复键。

【讨论】:

    【解决方案2】:

    我认为主要问题是接口,因为 JAXB 应该能够编组 Map。接口的问题在于 JAXB 解组不知道使用什么具体类型来实现接口。编组流可能不是来自 Java 代码,因此流不能包含具体的类型信息。 JAXB 必须选择一个实现,它需要帮助才能做到这一点。

    JAXB: How should I marshall complex nested data structures

    Mapping your favorite class

    JBoss Built-in JAXB Providers

    这是 Web 服务编组的常见问题。一种稳健的方法是使用包含具体类型的数据传输对象,这些具体类型可以在 WSDL 中精确定义以进行数据传输。您必须在应用程序代码中将域对象映射到这些 DTO 中或从这些 DTO 中映射出来,这是一个缺点。这种方法的一个好处是您的应用程序与数据传输格式松散耦合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 2014-03-02
      • 2012-04-19
      • 1970-01-01
      • 2021-08-15
      • 2013-01-07
      相关资源
      最近更新 更多