【问题标题】:Spring @ResponseBody returns JSON, but keys are missingSpring @ResponseBody 返回 JSON,但缺少键
【发布时间】:2013-06-15 05:18:13
【问题描述】:

我以 JSON 格式返回 SQL 查询的结果。结果没问题,但是缺少键(查询中指定的列)。我是否必须将类与查询关联才能获取键名?我不认为这是杰克逊映射,因为当我明确使用它(对象映射器而不是让 Spring 在@ResponseBody 中处理它)时,我得到了相同的结果。

春季 3.2.1,休眠 3.6。使用 Hibernate createSQLQuery 从 5 个表中获取结果。

List<EvalMasterEvalDetail> details = session.createSQLQuery(query).list();

结果如下:

[[61,"Conference","CME Conference"],[42,"Lecture","fellow lecture"]]

应该是

[[{"detail_id":61, "event_type":"Conference", "event_name":"CME Conference"}],
[{"detail_id":42, "event_type":"Lecture", "event_name":"fellow lecture"}]]

【问题讨论】:

    标签: json spring hibernate


    【解决方案1】:

    您可以通过迭代您的列表来准备一个 JSONObject 或 JSONObject 列表,然后作为字符串返回给客户端。

    【讨论】:

      【解决方案2】:

      默认情况下,Hibernate 中的 SQL 查询返回标量值列表(对于 select 中的单列)或 Object[] 列表(对于多列)。

      你有后一种情况。 List&lt;EvalMasterEvalDetail&gt; 在这种情况下并不意味着该列表包含 EvalMasterEvalDetail 的实例,因为 list() 返回一个原始的 List,因此您有未经检查的转换。

      如果每个结果元组代表一个映射实体(或多个映射实体),您可以使用addEntity() and addJoin()将它们转换为实体。

      如果每个结果元组代表一个任意(非映射)类,则可以使用ResultTransformer(如AliasToBeanResultTransformer)。

      您还可以手动将Object[]s 转换为目标对象(在复杂情况下很有用)。

      【讨论】:

      • 如何将 addEntity 添加到 JPA Repository @Query?
      猜你喜欢
      • 2018-01-11
      • 2015-12-30
      • 2013-03-08
      • 2014-10-28
      • 2013-01-20
      • 2012-09-20
      • 2023-03-19
      • 2011-06-18
      • 2014-12-12
      相关资源
      最近更新 更多