我想知道在Android项目和后端项目中共享相同POJO的最佳方式是什么。
当我在后端有POJO时,这个POJO有Hibernate和Jackson注释。在课程的顶部有HQL句子@NameQueries。 当我在Android项目中需要相同的POJO时,请复制POJO并删除所有注释。目前我在Android项目中使用GSON。
所以我的问题是,当我在后端创建新的POJO时,最好的方法是摆脱这种繁琐的工作,我也需要在Android项目中使用它。
到目前为止,我已经考虑过创建lib项目,但我还没弄清楚如何控制注释。在Android方面,我也可以与杰克逊合作,但我想摆脱Hibernate的东西。
答案 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。