SpringBoot单个GET接口如何同时返回List<Courier>与OrderRelatedInfo
SpringBoot单个GET请求同时返回多类数据的实现方案
完全可以通过单个GET请求同时返回快递员列表(List<Courier>)和订单关联信息(OrderRelatedInfo),核心是用一个**数据传输对象(DTO)**来封装这两类数据,或者用Map临时封装(推荐前者)。
代码中?处的填写方案
1. 自定义DTO封装(推荐)
首先创建一个专门的DTO类,用来承载需要返回的两类数据:
import java.util.List; // 可以用Lombok的@Data注解自动生成getter、setter等方法,也可以手动编写 public class SearchResultDTO { private List<Courier> courierList; private OrderRelatedInfo orderRelatedInfo; // 手动编写getter和setter public List<Courier> getCourierList() { return courierList; } public void setCourierList(List<Courier> courierList) { this.courierList = courierList; } public OrderRelatedInfo getOrderRelatedInfo() { return orderRelatedInfo; } public void setOrderRelatedInfo(OrderRelatedInfo orderRelatedInfo) { this.orderRelatedInfo = orderRelatedInfo; } }
然后修改Controller方法:
第一个?填写DTO类名SearchResultDTO,第二个?填写封装好的DTO实例:
@GetMapping("/search/{id}") public SearchResultDTO search(@PathVariable String id){ List<Courier> courierList = xyzListReturning; // 替换为实际获取快递员列表的业务逻辑 OrderRelatedInfo orderRelatedInfo = xyzObjectReturning; // 替换为实际获取订单关联信息的业务逻辑 SearchResultDTO result = new SearchResultDTO(); result.setCourierList(courierList); result.setOrderRelatedInfo(orderRelatedInfo); return result; }
2. 用Map临时封装(快速实现)
如果不想创建DTO类,也可以用Map<String, Object>来临时封装数据,此时第一个?填写Map<String, Object>,第二个?填写封装好的Map实例:
import java.util.HashMap; import java.util.Map; @GetMapping("/search/{id}") public Map<String, Object> search(@PathVariable String id){ List<Courier> courierList = xyzListReturning; OrderRelatedInfo orderRelatedInfo = xyzObjectReturning; Map<String, Object> result = new HashMap<>(); result.put("courierList", courierList); result.put("orderRelatedInfo", orderRelatedInfo); return result; }
说明
- SpringBoot会自动将返回的DTO或Map序列化为JSON格式响应给前端,前端可以通过对应的键名(如
courierList、orderRelatedInfo)提取对应数据。 - 优先选择自定义DTO的方式,因为它具备类型安全性,便于后续维护、扩展和接口文档生成。
内容的提问来源于stack exchange,提问作者AasthaChaudhary
相关产品推荐
相关产品推荐

