Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JEE Restfull webservice和Android之间使用相同的API解析数据的最佳方式是什么?_Java_Android_Jakarta Ee_Jackson_Jaxb - Fatal编程技术网

Java 在JEE Restfull webservice和Android之间使用相同的API解析数据的最佳方式是什么?

Java 在JEE Restfull webservice和Android之间使用相同的API解析数据的最佳方式是什么?,java,android,jakarta-ee,jackson,jaxb,Java,Android,Jakarta Ee,Jackson,Jaxb,我们有一个由JEE模块、JAVA客户端应用程序、Android应用程序和其他自制JAVA项目组成的大型项目 由于项目的多样性,为了限制项目之间的代码冗余,我们决定制作JEE、java客户端应用程序和Android应用程序所共有的java libs项目和java实体项目 起初,我们在JEE服务器端只有Java客户端和Restfull web服务,它们使用JAXBXML绑定API交换数据。因此,在实体项目(设置为依赖于Java客户机项目和JEE项目)中的类上使用JAXB注释很容易。双方都可以使用相同

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

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

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

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

我还尝试使用JSON绑定,因为我看到JSON-B将是JavaEE8中的标准,但它似乎需要JavaEEAPI类,我认为将其添加到Android项目中并不好

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

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


谢谢。

让我们为您的实体项目命名
实体模块
。该项目包含用
JAXB
注释注释的
POJO
类,例如:
@xmlement
@XmlType
,等等。正如您所写,“JAXB在Android上“贬值”了”,您需要在以下两者之间进行选择:使用其他工具读取
JAXB
注释或创建新的定制
POJO
结构

通过其他工具阅读
JAXB
注释
Jackson
库对
JAXB
注释有很好的支持。您所需要做的就是使用这个模块。注册很容易,如果您已经使用
Jackson
JSON
进行序列化/反序列化,这是一个明显的选择。如何做到这一点,您可以在SO上找到此问题的阅读答案:。
优点:

  • 您不需要创建新的
    POJO
    s架构
  • 如果
    restfulapi
    发生更改,您将使用下一版本的
    实体模块
    项目
缺点:

  • Android
    上启用
    JAXB
    时出现问题
  • 与使用重型
    JAXB
    Jackson
    模块层相关的性能问题
新模块 第二种选择是使用
POJO
s创建新模块,并使用更快、更小的库,如。
优点:

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

  • 您需要创建具有新类结构的新模块
  • 学习和维护新图书馆
  • 如果
    API
    发生更改,则需要在几个模块中复制更改
您需要查看上面的“优缺点”列表,并决定什么最适合您

我还想再增加两个选项:

  • JAXB
    注释替换为
    Jackson
    注释
    Jackson
    除了对
    JSON
    的支持之外,还提供了非常好的
    XML
    支持。它将使您能够轻松支持
    API
    中的
    JSON
    XML
    格式。此外,您还可以在
    Android
    上使用
    Jackson
  • 为Android创建新的应用程序。大多数情况下,
    UI
    Android
    app上流动与
    Web app
    上流动是不同的,你可能最终会有这样的想法

  • 让我们命名您的实体项目
    实体模块
    。该项目包含用
    JAXB
    注释注释的
    POJO
    类,例如:
    @xmlement
    @XmlType
    ,等等。正如您所写,“JAXB在Android上“贬值”了”,您需要在以下两者之间进行选择:使用其他工具读取
    JAXB
    注释或创建新的定制
    POJO
    结构

    通过其他工具阅读
    JAXB
    注释
    Jackson
    库对
    JAXB
    注释有很好的支持。您所需要做的就是使用这个模块。注册很容易,如果您已经使用
    Jackson
    JSON
    进行序列化/反序列化,这是一个明显的选择。如何做到这一点,您可以在SO上找到此问题的阅读答案:。
    优点:

    • 您不需要创建新的
      POJO
      s架构
    • 如果
      restfulapi
      发生更改,您将使用下一版本的
      实体模块
      项目
    缺点:

    • Android
      上启用
      JAXB
      时出现问题
    • 与使用重型
      JAXB
      Jackson
      模块层相关的性能问题
    新模块 第二种选择是使用
    POJO
    s创建新模块,并使用更快、更小的库,如。
    优点:

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

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