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

Posted

技术标签:

【中文标题】Spring boot rest api - 我可以在不为响应对象创建任何 java 类(DTO 或实体)的情况下获得响应吗?【英文标题】:Spring boot rest api - Can I get response without creating any java class(DTO's or entity) for the response object? 【发布时间】:2020-06-22 00:44:59 【问题描述】:

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

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

@Override

公共列表 getOrder(String orderNo) StoredProcedureQuery 查询 = 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();。

【问题讨论】:

有谁知道如何将过程响应(可能接收多个光标作为响应)转换为 Map 或 JSONNode ???? 【参考方案1】:

是的,您可以从控制器类返回 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;

【讨论】:

请将此代码以正确格式添加到您的问题中 谢谢@rieckpil。在我的问题中添加了代码 sn-p。有什么方法可以将 resultSet 转换为 map 或 resultset 为 JSONNode?​​span>

以上是关于Spring boot rest api - 我可以在不为响应对象创建任何 java 类(DTO 或实体)的情况下获得响应吗?的主要内容,如果未能解决你的问题,请参考以下文章

基于Spring Boot的RESTful API实践

Spring Boot - 模拟对外部 API 的 POST REST 请求

Spring Boot构建RESTful API与单元测试

Spring Boot Rest api 与 Spring Kafka

Spring Boot整合Swagger2构建RESTful API

Spring Boot构建RESTful API