Spring boot rest api - Могу ли я получить ответ без создания класса java (DTO или объекта) для объекта ответа? - PullRequest
0 голосов
/ 10 марта 2020

Я реализую приложение весенней загрузки rest api, в котором я вызываю хранимую процедуру (которая возвращает возвратный путь). Мне нужно показать этот ответ как JSON объект с ключом, парой значений без создания каких-либо DTO или объекта для этого ответа. Можно ли выполнить вышеуказанное требование?

Я получаю ответ (курсор) из хранимой процедуры.

@ Override

publi c Список 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");
Список результатов = query.getResultList () ;.

1 Ответ

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

Да, вы можете либо вернуть Map<String, Object> из класса вашего контроллера, либо использовать обобщенный класс c JsonNode от Джексона.

Примером карты может быть следующий (с помощью Java 11):

@RestController
@RequestMapping("/public")
public class PublicController {

  @GetMapping("/data")
  public Map<String, Object> returnFoo() {
    Map<String, Object> resultFromDatabase = Map.of("name", "duke", "data",
      Map.of("id", 1337, "enabled", true));
    return resultFromDatabase;
  }
}

Результат будет следующим:

curl -v localhost:8080/public/data

{"data":{"id":1337,"enabled":true},"name":"duke"}

Можно также просто вернуть Object, но тогда вам нужно убедиться, что результат ваша база данных всегда доступна для JSON, иначе вы можете получить исключения:

@GetMapping("/data")
public Object returnFoo() {
  Map<String, Object> resultFromDatabase = Map.of("name", "duke", "data",
    Map.of("id", 1337, "enabled", true));
  return resultFromDatabase;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...