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 - 模拟对外部 API 的 POST REST 请求
Spring Boot Rest api 与 Spring Kafka