Как построить JSON объект на основе списка результатов StoredProcedureQuery - SpringBoot Rest API? - PullRequest
0 голосов
/ 11 марта 2020

Мне нужно будет отобразить ответ хранимой процедуры (несколько параметров 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;   
}

Приведенный выше код возвращает только значение, а не имена соответствующих столбцов.

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Вы можете вернуть JSON непосредственно из хранимой процедуры:

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

Подробнее о создании JSON:

0 голосов
/ 11 марта 2020

Это также лучшее решение для этого.

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...