springcloud feign远程调用请求参数对象变成linkhashmap处理
springcloud feign远程调用复杂请求参数对象,
controller接收后对象参数变成linkhashmap处理,使用jackjson,private final ObjectMapper objectMapper;
objectMapper.convertValue(item, clazz); 处理
feign客户端参数复杂集合List对象
@FeignClient(contextId = "remoteTaskService", value = ServiceNameConstants.UPMS_SERVICE)
public interface RemoteTaskService {@PostMapping(value = "/task/createAndExportTask")public R createAndExportTask(@RequestBody TaskExportDTO taskExportRequest);}
@Data
public class TaskExportDTO {/*** 任务标题*/private String title;/*** easyExcel写入表头实体类* */private Object excelVO;/*** easyExcel写入表格数据集合类*/private List<Object> dataList;/*** 用户id*/private Long userId;/*** 转化使用实体类*/private Class clazz;/*** 重试任务ID (非必填)*/private Long repeatTaskId;}feign客户端传参数:
private final RemoteTaskService remoteTaskService; //客户端引入feign远程调用客户端List<Object> dataList=new ArrayList<>();for (int i = 0; i < 10; i++) {PostExcelVO postExcelVO = new PostExcelVO();postExcelVO.setPostId(Long.valueOf(i));postExcelVO.setPostName(j+"岗位名称" + i);postExcelVO.setPostCode(j+"岗位标识" + i);postExcelVO.setRemark(j+"岗位描述" + i);postExcelVO.setCreateTime(LocalDateTime.now());dataList.add(postExcelVO);}TaskExportDTO request=new TaskExportDTO();request.setTitle(TaskTitleEnum.POST.getTitle());request.setExcelVO(new PostExcelVO());request.setDataList(dataList);request.setClazz(PostExcelVO.class);request.setUserId(SecurityUtils.getUserid());// feign发起请求传参数remoteTaskService.createAndExportTask(request);feign的实现controller类,使用jackjson 注入依赖
private final ObjectMapper objectMapper;//注入jackjson注入依赖@Inner(value = false)@PostMapping(value = "/createAndExportTask")public R createAndExportTask(@RequestBody TaskExportDTO taskExportRequest){if (taskExportRequest == null) {return R.failed("请求参数不能为空");}String title = taskExportRequest.getTitle();Long repeatTaskId = taskExportRequest.getRepeatTaskId();Long userId = taskExportRequest.getUserId();Object excelVO = taskExportRequest.getExcelVO();List<?> dataList = taskExportRequest.getDataList();Class<?> clazz = taskExportRequest.getClazz();// 校验必要字段if (title == null || title.trim().isEmpty()) {return R.failed("任务标题不能为空");}if (userId == null) {return R.failed("用户id不能为空");}if (dataList == null || dataList.isEmpty()) {return R.failed("数据列表不能为空");}if (clazz == null) {return R.failed("目标类信息缺失");}Object conversionExcelVO = null;List<Object> conversionDataList = new ArrayList<>();try {// 使用 convertValue 替代 write-read 模式以提高性能// String itemStr = objectMapper.writeValueAsString(item);// Object obj = objectMapper.readValue(itemStr, clazz);if (excelVO != null) {conversionExcelVO = objectMapper.convertValue(excelVO, clazz);}for (Object item : dataList) {if (item != null) {Object convertedItem = objectMapper.convertValue(item, clazz);conversionDataList.add(convertedItem);}}} catch (IllegalArgumentException e) {log.error("对象转换失败", e);return R.failed("数据格式转换异常");}try {sysTaskService.createAndExportTask(title, conversionExcelVO, conversionDataList, repeatTaskId, userId);return R.ok();} catch (Exception e) {// 修复日志模板参数个数不一致的问题,并隐藏具体异常细节log.error("创建并导出任务失败,title: {}, repeatTaskId: {}", title, repeatTaskId, e);return R.failed("任务创建失败,请稍后再试");}}