首页 > 解决方案 > Spring boot rest api - 我可以在不为响应对象创建任何 java 类(DTO 或实体)的情况下获得响应吗?

问题描述

我正在实现 spring boot rest api 应用程序,我在其中调用存储过程(返回 refcursor)。我需要将该响应显示为带有键、值对的 JSON 对象,而无需为该响应创建任何 DTO 或实体。是否有可能达到上述要求?

我从存储过程中得到响应(光标)。

@覆盖

公共列表 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();。

标签: javaspringspring-boot

解决方案


是的,您可以Map<String, Object>从控制器类返回或使用 Jackson 的泛型JsonNode类。

Map 的一个示例可能如下(在 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;
}

推荐阅读