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