Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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
在Android项目和java后端项目之间共享POJO_Java_Android_Backend_Pojo - Fatal编程技术网

在Android项目和java后端项目之间共享POJO

在Android项目和java后端项目之间共享POJO,java,android,backend,pojo,Java,Android,Backend,Pojo,我想知道在Android项目和后端项目中共享相同POJO的最佳方式是什么 当我在后端有POJO时,这个POJO有Hibernate和Jackson注释。在类的顶部有HQL语句,如@NameQueries。 当我在Android项目中需要相同的POJO时,复制POJO并删除所有注释。目前,我在Android项目中使用GSON 所以我的问题是,当我在后端创建新的POJO时,什么是摆脱这项繁琐工作的最佳方法?我在Android项目中也需要它 到目前为止,我已经考虑过创建lib项目,但还没有弄清楚如何控

我想知道在Android项目和后端项目中共享相同POJO的最佳方式是什么

当我在后端有POJO时,这个POJO有Hibernate和Jackson注释。在类的顶部有HQL语句,如@NameQueries。 当我在Android项目中需要相同的POJO时,复制POJO并删除所有注释。目前,我在Android项目中使用GSON

所以我的问题是,当我在后端创建新的POJO时,什么是摆脱这项繁琐工作的最佳方法?我在Android项目中也需要它


到目前为止,我已经考虑过创建lib项目,但还没有弄清楚如何控制注释。在Android方面,我也可以和Jackson一起工作,但我想摆脱Hibernate的东西

我想GSON是你最好的选择。但是请注意,在hibernate with relationships(一对多,多对多)中,可能会由于解析到json时调用字段的
get
方法而导致错误,您需要指出字段是应该立即获取还是延迟获取。如果您不需要android中的字段,您可以在后端的pojo中使用
@Expose
注释来指示哪些字段应该只公开或转换为json。我认为,
@Expose
仅在

中可用,还建议您看看它是两个最流行的JSON读/写库之一(上面提到了另一个GSON)

与Jackson的双向引用:

循环参考:


还具有自定义序列化程序和反序列化程序等功能。

最好的方法是使用序列化“方案”(因为没有更好的词)将POJO序列化为可由Android反序列化的序列化流

现代编程技术中最常用的格式是JSON,因此使用JSON,您可以创建一个服务,将POJO呈现为JSON对象,并且您的Android应用程序将其从JSON反序列化为POJO

服务可以是Restful Web服务,也可以创建将POJO呈现为JSON的自定义服务

Java7现在包括JSR-353、JSON处理(简称JSON-p),这为您提供了各种功能和类来提供JSON编组和解编组。可以找到一个简单的教程

在Android应用程序中,您可以使用GSON进行JSON解组


我希望这能有所帮助。

我可以看到在两个平台上共享这些POJO的吸引力,但我认为最好的选择是在共享库中创建一组简单的DTO,并从后端和android上使用它们。在两个项目中拥有相同的实际域对象的问题正是您所描述的——您在其中做的是后端类型的事情,而不属于前端

客户的一个简单示例(这种类型与构建器模式有一些交叉,因此您可以从构建器重复使用这些DTO):


虽然这仍然会导致复制(在适当的域对象和DTO之间),但这确实意味着如果您更改后端中的任何内容,它也必须更改DTO以供客户端查看,因此客户端保持同步,因为它使用相同的DTO。

感谢您的回答,但当Android应用程序向RESTful web服务发出请求时,会使用JSON。我的问题是服务器和Android客户端代码中的底层POJO。我省略了JSON部分,因为我认为它不相关。您需要为客户端和服务器“克隆”这些POJO。不要忘记Android编译POJO的方式与JDK不同,因此JSON是两种平台的消息传输方式。
//this is your back end "proper" domain object
class Customer
{
    <back end specifics>
    ...

    Customer(CustomerDTO customer)
    {
        //set Customer fields from the dto
    }

    CustomerDTO toDTO()
    {
        CustomerDTO dto = new CustomerDTO();
        dto.setName(this.getName());
        dto.setAddress(this.getAddress());
        ...

        return dto;
    }
}
public class CustomerDTO
{
    private String mName;

    public String getName()
    {
        return mName;
    }

    ...
}