2014-09-03 130 views
0

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

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

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

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

回答

0

我想GSON会是你最好的选择。但要注意,在hibernate中与关系(一对多,多对多)有关的问题可能会导致错误,因为解析为json时,字段的方法被调用,您需要指出是否应该急切地提取或延迟提取该字段。如果您不需要android中的字段,则可以在后端的pojo中使用@Expose批注,以指示哪些字段只应公开或转换为json。我认为@Expose只有availbe在google's json

0

最好的方法是使用序列化“方案”(缺乏更好的单词)将您的POJO序列化为可以由Android卸载的序列化流。

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

服务可以是Restful Web服务,也可以创建将POJO呈现为JSON的自定义服务。现在Java 7包含JSR-353,JSON处理(简称JSON-P),它提供了各种功能和类来提供JSON编组和解组。一个简单的教程可以找到here

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

我希望这个帮助。

+0

感谢您的回答,但当Android应用向RESTful Web服务发出请求时正在使用JSON。我的问题是服务器和Android客户端代码中的底层POJO。我遗漏了JSON部分,因为我认为它不相关。 – user3409855 2014-09-04 09:34:42

+0

您需要为客户端和服务器“克隆”这些POJO。不要忘记,Android编译POJO的方式与JDK不同,因此为什么JSON是两种平台的消息传输。 – 2014-09-04 10:23:18

0

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

的客户一个简单的例子(其中一种具有一些交叉在与建筑商模式,所以你可以重新使用这些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是一个简单的版本在你的共享库中,不应该需要杰克逊注释,因为它会自动默认只包含你想要在客户端上的内容。正如你所说的,如果你确实需要一些杰克逊注解,那么在Android方面很好。这是DTO你会从后端发回:

public class CustomerDTO 
{ 
    private String mName; 

    public String getName() 
    { 
     return mName; 
    } 

    ... 
} 

虽然仍然有重复结束(正确的域对象和DTO之间),如果你在它必须在后端改变任何东西它确实意味着也改变了DTO以便客户端看到,因此客户端保持同步,因为它使用相同的DTO。