JSON对象与Spring模型对象

时间:2011-10-03 12:51:34

标签: json spring spring-mvc model jsonp

我正在使用标准的Spring MVC 3x框架,并且我的模型实体都是用所有良好的关系(javax.persistence API)构建的......与我的数据库集成。

随着应用程序的发展,我们需要支持JSON调用。

鉴于我在模型实体层中映射了各种关系,

(classX-> classY以及classY-> classX)

我想知道将这些模型类中的一些转换为适当的JSON对象而没有重复引用的最佳做法是什么?

例如:样品车反应

{"classX":{"id":"1", "classY":{"id":"2", "classX":{"id":"1", "classY":{"id":"2"...

我正在考虑一些我不介意反馈的方法......

  1. 保留现有的模型类并将交叉关系设置为NULL,然后将其放入我的ModelMap中,这样就不会有某种形式的重新引用(我认为它是一个HACK)

    {"classX":{"id":"1", "classY":{"id":"2", "classX":null}}}
    
  2. 重新创建类似于现有模型的JSON类而没有重新引用类(但我认为这意味着它们不会重复使用......因为我最终只会有classX-> classY而不是倒退如果我希望用另一种方式进行数据响应)。

    {"jsonClassX": {"id":"1", "jsonClassY":{"id":"2"}}}
    
  3. 只需将其构建为每个控制器调用的标准ModelMap映射。因此,没有可重用JSON类的概念,并且依赖于控制器构造和组织返回值的方式。这似乎是最简单的,但它意味着不可重复使用的代码(除了剪切和粘贴)......

    {"x":{"id":"1", "y":{"id":"2"}}} // for controller call 1
    {"y":{"id":"2", "x":{"id":"1"}}} // for controller call 2
    
  4. 所以这些是我目前正在讨论的选项,我不介意得到一些反馈以及其他人如何做到的一些指示。

1 个答案:

答案 0 :(得分:0)

你应该使用杰克逊来管理你的json编组。然后,您可以向模型对象添加注释,告诉Jackson如何处理这种类型的关系。 http://wiki.fasterxml.com/JacksonFeatureBiDirReferences是如何建立这些关系的好参考。