【问题标题】:How to construct JSON Object based on StoredProcedureQuery Result List - SpringBoot Rest API?如何基于 StoredProcedureQuery 结果列表构造 JSON 对象 - SpringBoot Rest API?
【发布时间】:2020-03-11 08:09:23
【问题描述】:

我需要显示存储过程响应(多个 OUT 参数)而不为该响应创建任何 java 类。

ResultList 可能包含多个游标或单个游标或单个字符串或多个字符串,甚至可以是游标和字符串的组合。我需要全部解析并将其显示为 JSON 对象。 我们是否有自动执行这些功能的映射器?

现在我可以使用List<Object[]> 作为返回对象,获取以下格式的数据,

FirstCursor(返回对象列表 - 无列名):

[  
 [  
  "XYZ",  
  18653  
 ]  
]

但是我也想要列名和值。

[
 {
  "uname": "XYZ",
  "phone": 18653
 }
]

服务代码供您参考,

public List<Object[]> getOrder(String orderNo) 
{  
StoredProcedureQuery query = entityManager.createStoredProcedureQuery("xx.xxx.get_order_details"); 
 query.registerStoredProcedureParameter(1, String.class, ParameterMode.IN);     query.registerStoredProcedureParameter(2, void.class, ParameterMode.REF_CURSOR);     query.setParameter(1, "OR-1001");   
List<Object[]> results = query.getResultList();  
returns results;   
}

上面的代码只返回值,而不是它各自的列名。

【问题讨论】:

  • 请分享你的代码你做了什么
  • 您使用的是什么数据库?他们中的许多人都支持返回 JSON
  • 已添加。 @Ros5292
  • Oracle 数据库。在不创建 DTO 或实体的情况下,我必须将结果列表返回为 JSON ("Key" : "Value") 。我们有什么方法可以实现它。 @SimonMartinelli

标签: java spring spring-boot


【解决方案1】:

您可以直接从存储过程中返回 JSON:

SELECT JSON_ARRAYAGG(
          JSON_OBJECT('uname' VALUE uname,
                      'phone' VALUE phone)
) 
FROM items

阅读有关创建 JSON 的更多信息:

【讨论】:

  • 谢谢。如果不修改存储过程,就无法解析 List,因为我们无权修改这些过程。我们可以通过 java 代码将 List 解析为 JSON Object 的任何其他方式吗?
【解决方案2】:

这也是这个尝试的最佳解决方案。

List<Map> ret = new ArrayList();
for(Object[] result : results) {
            Map row = new HashMap<>();
            row.put("uname", result[0]);
            row.put("phone", result[1]);
            ret.add(row);
        }
        return ret;

【讨论】:

  • 1) 它必须是通用的。考虑到我对“密钥”一无所知,必须动态填充所有内容。 2)我得到响应为 List --> 如何将其解析为 Map(此映射可以作为 JSON 对象返回)。我们有任何预建的转换器吗?还是我们需要手动完成?
  • @Raj 我对此不太了解,但我们需要手动完成。在极少数情况下,我们无法知道价值的“关键”
  • @Raj 但你应该尝试这种方式。我认为这适用于您的情况
  • 第三方共享的存储过程,我们将其用于显示目的。今天的程序可能会返回 10 个字段,明天他们可能会通过添加更多字段来更新它。我们需要对其进行迭代并在 UI 中显示这些字段。这里的一切都是动态的。
猜你喜欢
  • 1970-01-01
  • 2015-10-26
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 2020-09-27
  • 2018-04-25
  • 2019-03-23
相关资源
最近更新 更多