2011-03-16 80 views
2

我们收到JSON看起来像:与反序列化的关系实体

{ name: "john", surname: "smith", company: "1234342" } 

我们的客户端框架,也可以处理对象和公司之间的关系被映射到其ID。

我们有一个Hibernate客户实体,它有一个与另一个公司实体有关系的公司成员。

我们使用Spring的@RequestMapping method(@RequestBody Customer c)来处理请求和反序列化实体,但是我们无法反序列化提供的JSON。无论String是否为主键,Hibernate都不知道如何从String中构建公司。

将实体从Hibernate序列化为JSON是非常容易的,但反序列化似乎是另一回事。

是否有任何模式/结构来处理我们想要实现的目标?任何人都可以指引我走向正确的方向吗?

+0

http://code.google.com/p/google-gson/ – ant 2011-03-16 12:38:14

回答

2

最简单的解决方案是有两个独立的类模型,一个用于Hibernate,一个用于JSON,并根据需要在它们之间进行转换。但是,它并不是非常优雅,所以Jackson(这是Spring使用的JSON实现)提供了一种扩展机制(称为Modules),这反过来又允许你去register custom deserialization logic(即如何将JSON标记转换为java对象)。看看这个,看看它是否适合你。

您;然后必须使用configure Jackson in the Spring context来使用自定义映射器。

+0

Yeahh,目前,我们使用Map <>作为具有关系的实体并根据需要进行转换。没有关系的实体效果很好!我会看看模块,我不知道他们。谢谢! – Rafael 2011-03-16 13:22:19

+0

最后,我们决定采用这种方法......但仍然能够以某种方式通过id进行反序列化,但我们无法管理。 – Rafael 2011-04-13 08:38:33

0

我认为Dozer将是理想的做这样的序列化/反序列化。如果您收到JSON结构作为映射,那么您可以告诉推土机将该映射转换为相应的实体对象。