我们收到的JSON如下:
{ name: "john", surname: "smith", company: "1234342" }
我们的客户端框架还可以处理对象之间的关系,并将公司映射到其ID。
我们有一个Hibernate客户实体,其实体是与另一个公司实体的关系。
我们使用Spring的@RequestMapping method(@RequestBody Customer c)
来处理请求和反序列化实体,但是我们无法反序列化提供的JSON。无论String是否为主键,Hibernate都不知道如何从String构建Company。
将实体从Hibernate序列化为JSON非常容易,但反序列化似乎是另一回事。
是否有任何模式/构造来处理我们想要实现的目标?任何人都可以指出我正确的方向吗?
答案 0 :(得分:2)
最简单的解决方案是拥有两个独立的类模型,一个用于Hibernate,另一个用于JSON,并在必要时在它们之间进行转换。
但是,它不是很优雅,所以Jackson(这是Spring使用的JSON实现)提供了一种扩展机制(称为Modules),这反过来允许你register custom deserialization logic(即如何将JSON标记转换为java对象)。看一下,看看它是否适合你。您;然后必须configure Jackson in the Spring context才能使用自定义映射器。
答案 1 :(得分:0)
我认为Dozer是进行此类序列化/反序列化的理想选择。如果您将JSON结构作为地图接收,那么您可以告诉dozer将该地图转换为相应的实体对象。