繁体   English   中英

在JEE Restfull网络服务和Android之间使用相同的API解析数据的最佳方法是什么?

[英]What is the best way to parse data using same API between JEE Restfull webservice and Android?

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

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

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

现在我们有了一个Android应用程序,我想使用相同的方式交换数据。 事实是,JAXB在Android上已“贬值”。 因此,我在Jackson库中发现有一个JaxbAnnotation参数,用于获取与JAXB绑定的数据,但是我对解决方案的完全兼容性JaxbAnnotation

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

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

我希望您能很好地理解问题。

谢谢。

让我们将您的实体项目命名为entities-module 这个项目包含POJO与注解的类JAXB注释,比如: @XmlElement@XmlType ,等等。因为,像你这样写道,“JAXB是Android上的‘贬值’”你需要之间做出选择:读JAXB通过其他工具注释或创建新定制的POJO结构。

通过其他工具阅读JAXB批注

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

  • 您不需要创建新的POJO架构。
  • 如果Restful API发生更改,则可以使用下一个版本的entities-module项目。

缺点:

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

新模块

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

  • 更好的性能
  • 使用折旧的JAXB类构建应用程序没有问题。
  • 您可以优化结构:忽略未使用的字段,选择更好的类型,等等。

缺点:

  • 您需要使用新的类结构创建新的模块。
  • 学习和维护新图书馆
  • 如果API发生更改,则需要在几个模块中重复更改。

您需要查看上述pros and cons清单,然后确定最适合您的。

我还要添加两个选项:

  1. Jackson注释替换JAXB注释。 除了对JSON支持外, Jackson还具有非常好的XML支持。 这将使您轻松支持API JSONXML格式。 另外,您可以在Android上使用Jackson库。
  2. Android应用创建新的JSON API 通常, Android应用程序上的UI流程与Web App上的UI流程是不同的,无论如何,您最终都会想到这个想法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM