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



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

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

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

到目前为止,我已经考虑过创建lib项目,但还没有弄清楚如何控制注释。在Android方面,我也可以使用Jackson,但我想去掉Hibernate的东西。

我想GSON将是您的最佳选择。但请注意,在具有关系(一对多、多对多)的休眠中,由于在解析为json时调用字段的get方法,您需要指示字段是应急切地提取还是应懒散地提取,因此可能会导致错误。如果你不需要android中的字段,你可以在后台的pojo中使用@Expose注释来指示哪些字段只应该公开或转换为json。我认为@Expose只在谷歌的json 中可用

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

与Jackson的双向参考:http://wiki.fasterxml.com/JacksonFeatureBiDirReferences

循环参考:Json和Java-循环参考

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

最好的方法是使用序列化"scheme"(因为没有更好的词)将您的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):

//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;
    }
}

然后,您的DTO将是共享库中的一个简单版本,不需要Jackson注释,因为它将自动默认为只包含您在客户端上想要的内容。正如您所说,如果您确实需要一些Jackson注释,那么在Android方面也没问题。这是你从后端发回的DTO:

public class CustomerDTO
{
    private String mName;
    public String getName()
    {
        return mName;
    }
    ...
}

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

最新更新