如何将Excel类型转换为Resresource以统一服务方法返回类型
解决方案:将Excel转换为Resresource统一返回类型
核心思路
把服务方法的返回类型从Object改为Resresource,通过字段映射将Excel对象转换为Resresource对象,确保返回类型统一,符合规范。
修改后的代码实现
1. 调整Service类的返回类型与转换逻辑
@Service public class YourService { // 省略依赖注入等代码 public Resresource GtpResponse(String id){ Optional<Acc> acc = accrepo.findById(id); if(acc.isPresent()){ // 保留原有从Acc构建Resresource的逻辑 return buildResresourceFromAcc(acc.get()); } Excel excel = getExcel(id); if(excel != null){ // 将Excel转换为Resresource Resresource res = new Resresource(); // 根据业务逻辑映射字段:示例假设Excelfield对应Resresource的id res.setId(excel.getExcelfield()); // 转换details列表:将AllDetailsExcel逐个转为DetailRes List<DetailRes> detailResList = excel.getDetails().stream() .map(this::convertExcelDetailToResDetail) .collect(Collectors.toList()); res.setDetails(detailResList); return res; } // 处理未找到资源的场景,可根据业务需求调整(如返回空对象或抛出异常) throw new IllegalArgumentException("未找到ID对应的资源"); } // 辅助方法:将AllDetailsExcel转换为DetailRes private DetailRes convertExcelDetailToResDetail(AllDetailsExcel excelDetail){ DetailRes detail = new DetailRes(); // 根据两个类的实际字段对应关系赋值,示例如下: // detail.setDetailId(excelDetail.getExcelDetailId()); // detail.setContent(excelDetail.getExcelContent()); // ... 补充所有需要映射的字段 return detail; } // 原有从Acc构建Resresource的方法(示例) private Resresource buildResresourceFromAcc(Acc acc){ Resresource res = new Resresource(); res.setId(acc.getId()); // 构建details列表的逻辑 return res; } }
2. 控制器代码无需修改(此时服务返回Resresource,不再报错)
@RestController public class MainController { @Autowired private YourService acservice; @GetMapping("/{id}") public ResponseEntity<Resresource> getId(@PathVariable("id") String id){ Resresource response = acservice.GtpResponse(id); return new ResponseEntity<>(response, HttpStatus.OK); } }
关键说明
- 字段映射需严格遵循业务逻辑:比如
Excel的Excelfield是否对应Resresource的id,AllDetailsExcel与DetailRes的字段对应关系,需要根据实际业务调整。 - 异常处理:如果两种资源都未找到,建议抛出明确的业务异常或返回默认的
Resresource对象,避免返回null引发空指针问题。
内容的提问来源于stack exchange,提问作者Daboo
相关产品推荐
相关产品推荐

