Java 如何基于StoredProcedureRequesty结果列表-SpringBoot Rest API构造JSON对象?

Java 如何基于StoredProcedureRequesty结果列表-SpringBoot Rest API构造JSON对象?,java,spring,spring-boot,Java,Spring,Spring Boot,我需要显示存储过程响应(多个输出参数),而无需为该响应创建任何java类 结果列表可以包含多个游标、单个游标、单个字符串或多个字符串,甚至可以是游标和字符串的组合。我需要解析它并将其显示为JSON对象我们是否有自动完成这些功能的映射器? 现在我可以使用List作为返回对象以以下格式获取数据 FirstCursor(返回对象列表-无列名): 但是,我也需要列名称和值 [ { "uname": "XYZ", "phone": 18653 } ] 服务代码供您参考 public List

我需要显示存储过程响应(多个输出参数),而无需为该响应创建任何java类

结果列表可以包含多个游标、单个游标、单个字符串或多个字符串,甚至可以是游标和字符串的组合。我需要解析它并将其显示为JSON对象我们是否有自动完成这些功能的映射器?

现在我可以使用
List
作为返回对象以以下格式获取数据

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

但是,我也需要列名称和值

[
 {
  "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;   
}
public List getOrder(字符串orderNo)
{  
StoredProcedureQuery=entityManager.CreateStoreProcedureQuery(“xx.xxx.get_order_details”);
query.registerStoredProcedureParameter(1,String.class,ParameterMode.IN);query.registerStoredProcedureParameter(2,void.class,ParameterMode.REF_游标);query.setParameter(1,“或-1001”);
List results=query.getResultList();
返回结果;
}

上面的代码只返回值,不返回相应的列名。

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

SELECT JSON_ARRAYAGG(
          JSON_OBJECT('uname' VALUE uname,
                      'phone' VALUE phone)
) 
FROM items
阅读有关创建JSON的更多信息:


这也是解决此问题的最佳方案,请尝试一下

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;
List ret=new ArrayList();
对于(对象[]结果:结果){
Map row=newhashmap();
行put(“uname”,结果[0]);
第行。放置(“电话”,结果[1]);
ret.add(行);
}
返回ret;

分享你的代码你做了什么,请使用什么数据库?其中许多都支持返回JSONAdded@Ros5292Oracle数据库。在不创建DTO或实体的情况下,我必须将resultlist返回为JSON(“Key”:“Value”)。我们有什么办法来实施它吗@西蒙马特尼利斯银行。若不修改存储过程,则无法解析列表,因为我们无权修改这些过程的。我们还可以通过java代码将列表解析为JSON对象吗?1)它必须是泛型的。假设我对“KEY”一无所知,所有的东西都必须动态填充。2) 我得到的响应是列表-->如何将其解析为映射(此映射可以作为JSON对象返回)。我们有预建的转换器吗?还是我们需要手动操作?@Raj我不太清楚,但我们需要手动操作。在这种情况下,我们很少会不知道操作的“关键”value@Raj但是你应该这样做。我认为这是第三方共享的在您的案例中工作的存储过程&我们将其用于显示目的。今天的过程可能会返回10个字段&明天他们可能会通过添加几个字段来更新它。我们需要迭代它并在UI中显示这些字段。这里的一切都是动态的。
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;