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

时间:2014-09-03 09:29:49

标签: java android backend pojo

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

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

所以我的问题是,当我在后端创建新的POJO时,最好的方法是摆脱这种繁琐的工作,我也需要在Android项目中使用它。

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

4 个答案:

答案 0 :(得分:0)

我猜GSON是你最好的选择。但请注意,在hibernate中使用关系(一对多,多对多)可能会导致错误,因为解析到json时,字段的get方法被调用,您需要指示是否应该急切地获取字段或懒洋洋地抓起来。如果您不需要android中的字段,您可以在后端的pojo中使用@Expose注释来指示哪些字段只应公开或转换为json。我认为@Expose仅适用于google's json

答案 1 :(得分:0)

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

杰克逊的双向参考: http://wiki.fasterxml.com/JacksonFeatureBiDirReferences

循环参考: Json and Java - Circular Reference

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

答案 2 :(得分:0)

最好的方法是使用序列化“方案”(缺少更好的词)将POJO序列化为可以由Android解组的序列化流。

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

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

Java 7现在包括JSR-353,JSON Processing(简称JSON-P),它提供了各种功能和类来提供JSON编组和解组。可以找到一个简单的教程here

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

我希望这有帮助。

答案 3 :(得分:0)

我可以看到在两者之间共享这些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注释,因为它会自动默认只包含你想要的客户端。正如你所说,如果你确实需要一些杰克逊注释,这在Android方面很好。这是你从后端发回来的DTO:

public class CustomerDTO
{
    private String mName;

    public String getName()
    {
        return mName;
    }

    ...
}

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