我正在使用标准的Spring MVC 3x框架,并且我的模型实体都是用所有良好的关系(javax.persistence API)构建的......与我的数据库集成。
随着应用程序的发展,我们需要支持JSON调用。
鉴于我在模型实体层中映射了各种关系,
(classX-> classY以及classY-> classX)
我想知道将这些模型类中的一些转换为适当的JSON对象而没有重复引用的最佳做法是什么?
例如:样品车反应
{"classX":{"id":"1", "classY":{"id":"2", "classX":{"id":"1", "classY":{"id":"2"...
我正在考虑一些我不介意反馈的方法......
保留现有的模型类并将交叉关系设置为NULL,然后将其放入我的ModelMap中,这样就不会有某种形式的重新引用(我认为它是一个HACK)
{"classX":{"id":"1", "classY":{"id":"2", "classX":null}}}
重新创建类似于现有模型的JSON类而没有重新引用类(但我认为这意味着它们不会重复使用......因为我最终只会有classX-> classY而不是倒退如果我希望用另一种方式进行数据响应)。
{"jsonClassX": {"id":"1", "jsonClassY":{"id":"2"}}}
只需将其构建为每个控制器调用的标准ModelMap映射。因此,没有可重用JSON类的概念,并且依赖于控制器构造和组织返回值的方式。这似乎是最简单的,但它意味着不可重复使用的代码(除了剪切和粘贴)......
{"x":{"id":"1", "y":{"id":"2"}}} // for controller call 1
{"y":{"id":"2", "x":{"id":"1"}}} // for controller call 2
所以这些是我目前正在讨论的选项,我不介意得到一些反馈以及其他人如何做到的一些指示。
答案 0 :(得分:0)
你应该使用杰克逊来管理你的json编组。然后,您可以向模型对象添加注释,告诉Jackson如何处理这种类型的关系。 http://wiki.fasterxml.com/JacksonFeatureBiDirReferences是如何建立这些关系的好参考。