gpt4 book ai didi

java - 在 JEE Restful Web 服务和 Android 之间使用相同的 API 解析数据的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-30 05:04:30 29 4
gpt4 key购买 nike

我们有一个大项目,由JEE模块、JAVA客户端应用程序、Android应用程序和其他自制的java项目组成。

由于项目的多样性,我们决定制作JEE、Java客户端应用程序和Android应用程序通用的java libs项目和java实体项目,以限制项目之间的代码冗余。

一开始,我们在 JEE 服务器端只有 Java 客户端和 Restfull 网络服务,它们使用 JAXB XML 绑定(bind) API 交换数据。因此,很容易在实体项目(设置为对 Java 客户端项目和 JEE 项目的依赖项)中的类上使用 JAXB 注释。双方都可以使用相同的注释轻松地编码和解码 XML 数据。

现在我们有了一个 Android 应用程序,我想使用相同的方式来交换数据。问题是 JAXB 在 Android 上“贬值”了。所以我在 Jackson lib 中发现有一个 JaxbAnnotation 参数用于获取与 JAXB 绑定(bind)的数据,但我不相信该解决方案的完全兼容性。

我也尝试过使用 JSON 绑定(bind),因为我看到 JSON-B 将成为 JavaEE 8 中的标准,但它似乎需要 JavaEE API 类,我认为将它添加到 Android 项目中并不是一件好事。

所以我的问题是:使用相同的实体依赖项(和相同的解析 API)并限制实体对象上的 XML 或 JSON 绑定(bind)注释在 JEE Restfull Web 服务和 Android 应用程序之间交换数据的最佳实践是什么?

我希望你能很好地理解这个问题。

谢谢。

最佳答案

让我们将您的实体项目命名为entities-module。该项目包含使用 JAXB 注释的 POJO 类,例如:@XmlElement@XmlType 等。因为,就像您写的那样,“JAXB 在 Android 上‘折旧’”您需要在以下两者之间做出选择:读取其他工具的 JAXB 注释或创建新的自定义 POJO 结构。

通过其他工具读取JAXB注解

Jackson 库对 JAXB 注释有很好的支持。您需要做的就是使用 jackson-module-jaxb-annotations模块。它很容易注册,如果您已经使用 Jackson 进行序列化/反序列化 JSON,这是显而易见的选择。如何做到这一点,您可以在 SO 上找到此问题的阅读答案:Using JAXB with Google Android .
优点:

  • 您不需要创建新的 POJO 架构。
  • 如果 Restful API 发生变化,您将使用下一版本的 entities-module 项目。

缺点:

  • Android启用 JAXB 时出现问题。
  • 与使用繁重的 JAXBJackson 模块层有关的性能问题。

新模块

第二种选择是使用POJO 创建新模块并使用更快更小的库,如SimpleXML .
优点:

  • 更好的表现
  • 使用已贬值的 JAXB 类构建应用没有问题。
  • 您可以优化结构:忽略未使用的字段、选择更好的类型等。

缺点:

  • 您需要创建具有新类结构的新模块。
  • 学习和维护新库
  • 如果 API 发生变化,您需要在几个模块中复制更改。

您需要查看上面的优缺点列表,然后决定什么是最适合您的。

我还想再添加两个选项:

  1. JAXB 注释替换为 Jackson 注释。 Jackson 除了非常适合 JSON 之外,还具有非常好的 XML 支持。它将使您能够在 API 中轻松支持 JSONXML 格式。此外,您还可以在 Android 上使用 Jackson 库。
  2. 新建JSON API适用于 Android 应用。大多数情况下,Android 应用程序上的 UI 流程与 Web 应用程序 上的流程不同,您可能最终会想到这个想法。

关于java - 在 JEE Restful Web 服务和 Android 之间使用相同的 API 解析数据的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54790628/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com