Spring @ResponseBody返回JSON,但缺少键

时间:2013-06-18 20:25:13

标签: json spring hibernate

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

Spring 3.2.1,Hibernate 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"}]]

2 个答案:

答案 0 :(得分:3)

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

你有后一种情况。在这种情况下,List<EvalMasterEvalDetail>并不意味着该列表包含EvalMasterEvalDetail的实例,因为list()会返回原始List,因此您可以取消选中转化。

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

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

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

答案 1 :(得分:0)

您可以通过迭代列表并以字符串形式返回客户端来准备JSONObject或JSONObject列表。