【问题标题】:JSON Objects vs Spring Model ObjectsJSON 对象与 Spring 模型对象
【发布时间】:2012-03-30 03:11:55
【问题描述】:

我正在使用标准 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
    

所以这些是我目前正在处理的选项,我不介意获得一些反馈和一些关于其他人如何做到这一点的指示。

【问题讨论】:

  • 这是直接来自第三方库(如 Jackson)还是来自您自己的翻译代码?
  • 嗨@AaronSheffey,它只是标准的Spring配置东西public @ResponseBody Map<String, ? extends Object>...

标签: json spring spring-mvc model jsonp


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    相关资源
    最近更新 更多