亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Spring cloud restTemplate 傳遞復雜參數的方式(多個對象)

2024-07-14 08:40:58
字體:
來源:轉載
供稿:網友

使用微服務的時候往往服務之間調用比較麻煩,spring cloud提供了Feign接口調用,RestTemplate調用的方式

這里我探討下RestTemplate調用的方式:

服務A:接收三個對象參數  這三個參數的是通過數據庫查詢出來的

服務B:要調用服務A 服務B提供了查詢三個參數的方法,后面要使用三個參數

對于服務A,處理的方式有兩中

1. 服務B提供一個Feign接口將查詢三個參數的方法公開,服務A直接引用Feign來查詢參數,服務B只需要將三個查詢關鍵字傳遞過去即可

服務A action

 @PostMapping("/import/{busiCode}/{filePath}")  public Map<String,String> importExcel(@PathVariable("filePath") String filePath,@PathVariable("busiCode") String busiCode,@RequestBody Map<String, String> params,                     HttpServletRequest request,HttpServletResponse response) {    response.setCharacterEncoding("UTF-8");    UserInfo user = UserUtil.getUser();    return excelService.importExcel(filePath,busiCode,params,user);  }

服務A service 

//引入Feign接口 private ExcelFreign excelFreign; public Map<String,String> importExcel(String filePath, String busiCode,Map<String, String> params,UserInfo user ) {     Map<String,String> result=new HashMap<String,String>();     excelFreign = SpringTool.getApplicationContext().getBean(ExcelFreign.class);     CmdImportConfigDto configDto = excelFreign.getCmdImportConfigByBusiCode(busiCode);     CmdImportDto importDto=new CmdImportDto();     importDto.setImportConfigId(configDto.getId());     importDto.setExcelPath(filePath);     importDto.setParam(new GsonBuilder().create().toJson(params));     importDto.setLog("");     Long impId=null;     try {       impId= Long.valueOf(excelFreign.saveCmdImportDto(importDto));     } catch (Exception e1) {       e1.printStackTrace();       result.put("error", "保存出現異常");       result.put("message", e1.getMessage());       return result;     }     try{       excelFreign.updateImportStatus(impId, ImportConstant.ImportStatus.SUBMIT, "提交成功");     }catch(Exception e){         e.printStackTrace();      }     ValidateTask validateTask=new ValidateTask();     validateTask.init(impId,filePath, busiCode, params,user);     String message;     try {       message = validateTask.call();     } catch (Exception e) {       e.printStackTrace();       result.put("error", "驗證出現異常");       result.put("message", e.getMessage());       return result;     }     if(message!=null){       result.put("error", "驗證不通過");       result.put("message", message);       return result;     }     PersistTask persistTask=new PersistTask();     persistTask.init(impId,filePath, busiCode, params,user);     result.putAll(ImportQueue.submit(persistTask));     return result;   } 

服務B 提供的B-Fegin

@FeignClient(value = "frame-service",path = "/excelApi/v1") public interface ExcelFreign extends ExcelApi { }

服務B api層 B-api

public interface ExcelApi { /**    * 更新狀態    * @param impId    * @param importType    * @param result    */   @PostMapping("/updateImportStatus/{impId}/{importType}/{result}")   void updateImportStatus(@PathVariable("impId") Long impId, @PathVariable("importType") String importType, @PathVariable("result") String result) throws Exception; /**    * 獲取導入配置項    * @param busiCode    * @return    */   @GetMapping("/getImportConfig/{busicode}")   CmdImportConfigDto getCmdImportConfigByBusiCode(@PathVariable("busicode") String busiCode);   /**    * 保存信息    * @param importDto    * @return    */   @PostMapping("/saveImport")   String saveCmdImportDto(@RequestBody CmdImportDto importDto); } 

服務B 實現api接口的action

@RestController @RequestMapping("/excelApi/v1") public class ExcelFeignAction implements ExcelApi { @Autowired   private CmdExportService exportService;  /**    * 獲取導入配置項    * @param busiCode    * @return    */   @GetMapping("/getImportConfig/{busicode}")   public CmdImportConfigDto getCmdImportConfigByBusiCode(@PathVariable("busicode") String busiCode){     return cmdImportConfigService.getCmdImportConfigByBusiCode(busiCode);   }  /**    * 更新狀態    * @param impId    * @param importStatus    * @param result    */   @PostMapping("/updateImportStatus/{impId}/{importType}/{result}")   public void updateImportStatus(@PathVariable("impId") Long impId, @PathVariable("importType") String importStatus, @PathVariable("result") String result) throws Exception{     cmdImportService.updateImportStatus(impId,importStatus,new Date() , result);   } /**    * 保存信息    * @param importDto    * @return    */   @PostMapping("/saveImport")   public String saveCmdImportDto(@RequestBody CmdImportDto importDto){     try{       cmdImportService.saveCmdImportDto(importDto);       return importDto.getId();     }catch (Exception e){       e.printStackTrace();       throw new BusinessRuntimeException("系統出現異常");     }   } }

服務B 調用服務A  action層

/**    *    * @param busicode 導出的業務編碼 能確定某個模塊做導出操作    * @param values 請求參數    *    *        通過restTemplate 傳遞復雜參數    * @return    * 返回 文件流 讓瀏覽器彈出下載    */   @PostMapping(value = "/export/v3/{busicode}")   @ResponseBody   public ResponseEntity<byte[]> expDownLoadV3(@PathVariable("busicode") String busicode , @RequestBody Map<String,Object> values, HttpServletRequest request)throws Exception {    if(StringUtils.isBlank(busicode)){       throw new BusinessRuntimeException("參數錯誤,請檢查參數是否正確,busicode ?");     }     // 獲取執行過程     Map map = restTemplate.postForObject("http://" + serviceId + "/excelApi/v1/文件名"/"+busicode,values,Map.class);     String path = (String)map.get("filepath");     byte[] excel = FastDFSClient.downloadToBytes(path);     CmdExportConfigDto cmdExportConfig = exportService.getCmdExportConfigByBusiCode(busicode);     //獲取文件名     String fileName = cmdExportConfig.getReportName();     // 獲取文件后綴名     String extFileName = path.substring(path.lastIndexOf('.')+1);     HttpHeaders headers = new HttpHeaders();     // 獲取用戶瀏覽器的種類 對不同的瀏覽器進行編碼處理     final String userAgent = request.getHeader("USER-AGENT");     headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);     headers.setContentDispositionFormData("attachment", FrameUrlConstants.transFromFileName(userAgent,fileName) + "." + extFileName);     return new ResponseEntity<byte[]>(excel,headers,HttpStatus.OK);   } 

2.服務B將查詢出來的參數直接傳遞給服務A

服務A:

/**    * 接收參數傳遞    * 分別接收下面三種key value的鍵值對    * cmdExportConfig:CmdExportConfigDto    * exportFieldList:List<CmdExportFieldConfigDto>    * params:Map    * @param params    * @param request    * @param response    * @return    */   @PostMapping("/export/v2")   public ResponseEntity exportExcel(@RequestBody Map<String,Object> params,HttpServletRequest request,HttpServletResponse response) {     response.setCharacterEncoding("UTF-8");     try {       // 將文件的路徑獲取到       ObjectMapper mapper = new ObjectMapper();       LinkedHashMap requestParMap = (LinkedHashMap)params.get("cmdExportConfig");       CmdExportConfigDto cmdExportConfigDto = null;       List<CmdExportFieldConfigDto> exportFieldList = null;       if(requestParMap.size()>0){         cmdExportConfigDto = mapper.convertValue(requestParMap,CmdExportConfigDto.class);       }       ArrayList arrayList = (ArrayList)params.get("exportFieldList");       if(arrayList.size()>0){         exportFieldList = mapper.convertValue(arrayList, new TypeReference<CmdExportFieldConfigDto>() {});       }       Map values = (Map)params.get("params");       String filePath = excelService.exportExcel(cmdExportConfigDto,exportFieldList,params,request.getServletContext().getRealPath("/"));       Map<String,String> map = new HashMap<String, String>();       map.put("filepath", filePath);       return new ResponseEntity(map,HttpStatus.OK);     }catch (IOException e){       throw new RuntimeException("輸出文件出錯");     }   } 

服務B:

/**    *    * @param busicode 導出的業務編碼 能確定某個模塊做導出操作    * @param values 請求參數    *    *        通過restTemplate 傳遞復雜參數    * @return    * 返回 文件流 讓瀏覽器彈出下載 目前需要解決 將字節流響應到瀏覽器的控制臺了 后面均采用url下載的方式    */   @PostMapping(value = "/export/v3/{busicode}",produces = MediaType.TEXT_PLAIN_VALUE)   @ResponseBody   public ResponseEntity<byte[]> expDownLoadV3(@PathVariable("busicode") String busicode , @RequestBody Map<String,Object> values, HttpServletRequest request)throws Exception {     String busiCode = values.get("busiCode").toString();     if(StringUtils.isBlank(busiCode)){       throw new BusinessRuntimeException("參數錯誤,請檢查參數是否正確,busiCode ?");     }     // 獲取執行過程     Map map = excuteRestTemplate(busiCode,values);     String path = (String)map.get("filepath");     byte[] excel = FastDFSClient.downloadToBytes(path);     CmdExportConfigDto cmdExportConfig = exportService.getCmdExportConfigByBusiCode(busiCode);     //獲取文件名     String fileName = cmdExportConfig.getReportName();     // 獲取文件后綴名     String extFileName = path.substring(path.lastIndexOf('.')+1);     HttpHeaders headers = new HttpHeaders();erAgent = request.getHeader("USER-AGENT");     headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);     headers.setContentDispositionFormData("attachment", FrameUrlConstants.transFromFileName(userAgent,fileName) + "." + extFileName);     return new ResponseEntity<byte[]>(excel,headers,HttpStatus.OK);   }   /**    * 執行請求調用    * @param busiCode    * @param variables    * @return    */    private Map excuteRestTemplate(String busiCode,Map variables){      String serviceId="";      //查詢導出配置      CmdExportConfigDto cmdExportConfig = exportService.getCmdExportConfigByBusiCode(busiCode);      serviceId = cmdExportConfig.getSystemType();      if(cmdExportConfig==null){        throw new BusinessRuntimeException("沒有導出配置無法導出");      }      //根據導出配置id獲取導出字段信息      List<CmdExportFieldConfigDto> exportFieldList = exportService.getAllCmdExportFieldConfigDtoByConfigId(cmdExportConfig.getId());      if(StringUtils.isBlank(serviceId)){        throw new BusinessRuntimeException("未配置導出的服務");      }      Map<String, Object> uriVariables = new HashMap<>();      uriVariables.put("cmdExportConfig",cmdExportConfig);      uriVariables.put("exportFieldList",exportFieldList);      uriVariables.put("params",variables);     return restTemplate.postForObject("http://" + serviceId + "/excelService/export/v2",new HttpEntity(uriVariables),Map.class);    } 

設置瀏覽器頭

/**    * 根據不同的瀏覽器類型設置下載文件的URL編碼    * @param userAgent    * @param fileName    * @return    * @throws Exception    */   public static String transFromFileName(String userAgent,String fileName) throws Exception{     String finalFileName = "";     if(StringUtils.contains(userAgent, "MSIE")){//IE瀏覽器       finalFileName = URLEncoder.encode(fileName,"UTF-8");     }else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐瀏覽器       finalFileName = new String(fileName.getBytes("GBK"), "ISO8859-1");     }else{       finalFileName = URLEncoder.encode(fileName,"UTF-8");//其他瀏覽器     }     return finalFileName;   } 

總結

以上所述是小編給大家介紹的Spring cloud restTemplate 傳遞復雜參數的方式(多個對象),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久国产精品视频| 成人免费视频a| 久久久久久久久中文字幕| 欧美成人精品xxx| 久久亚洲春色中文字幕| 国内精品视频久久| 亚洲人成欧美中文字幕| 精品偷拍一区二区三区在线看| 91久久国产精品91久久性色| 51久久精品夜色国产麻豆| 亚洲国产日韩欧美在线99| 日韩三级成人av网| 国产精品电影在线观看| 国产精品网站大全| 亚洲aaaaaa| 高清亚洲成在人网站天堂| 亚洲精品国产电影| 日韩在线观看电影| 国产精品久久电影观看| 久久99久久99精品免观看粉嫩| 久久久久日韩精品久久久男男| 亚洲国产精品中文| 91日本在线视频| 欧美怡春院一区二区三区| 欧美成人午夜免费视在线看片| 成人福利免费观看| 毛片精品免费在线观看| 欧美精品在线免费播放| 久热精品视频在线观看一区| 国产成人97精品免费看片| 中文字幕亚洲欧美在线| 亚洲第一福利网站| 日本一区二区在线播放| 久久久久久久久中文字幕| 亚洲影院污污.| 成人国产精品久久久| 欧美成人全部免费| 91九色国产社区在线观看| 国产小视频国产精品| 日韩电影中文字幕av| 亚洲国产精品va在线| 久久久久久久成人| 亚洲国语精品自产拍在线观看| 在线a欧美视频| 欧美一级在线播放| 亚洲免费伊人电影在线观看av| 视频在线观看99| 久久av红桃一区二区小说| 亚洲激情中文字幕| 69久久夜色精品国产69| 成人精品在线观看| 国产精品一区二区三| 在线观看免费高清视频97| 亚洲欧美一区二区三区情侣bbw| 亚洲欧美第一页| 91免费视频国产| 欧美亚洲视频在线看网址| 精品高清一区二区三区| 91夜夜未满十八勿入爽爽影院| 欧美大全免费观看电视剧大泉洋| 久久青草精品视频免费观看| 欧美一级淫片播放口| 精品久久久91| 在线看福利67194| 国产精品久久久久久av福利| 精品久久香蕉国产线看观看亚洲| 亚洲最大福利视频网| 日韩欧美aⅴ综合网站发布| 成人亲热视频网站| 97激碰免费视频| 午夜精品美女自拍福到在线| 亚洲无av在线中文字幕| 在线播放国产一区二区三区| 性视频1819p久久| 久久人人爽人人爽人人片av高请| 亚洲va久久久噜噜噜久久天堂| 欧美老少做受xxxx高潮| 97免费视频在线| 97色在线视频| 一区三区二区视频| 欧美精品videossex性护士| 91亚洲国产成人精品性色| 国产免费一区二区三区在线能观看| 免费av一区二区| 亚洲视频精品在线| 欧美激情免费看| 国产精品久久久久久久久久久不卡| 亚洲成年网站在线观看| 欧美成人手机在线| 久久久av亚洲男天堂| 国产精品日韩欧美综合| 国内免费精品永久在线视频| 68精品国产免费久久久久久婷婷| 尤物九九久久国产精品的特点| 欧美日韩亚洲激情| 欧美日韩另类字幕中文| 亚洲xxx大片| 欧美老女人xx| 色噜噜狠狠狠综合曰曰曰| 91精品国产综合久久久久久久久| 久久99热精品这里久久精品| 欧美性猛交xxxx偷拍洗澡| 国产精品影片在线观看| 国产色视频一区| 欧美日韩国产麻豆| 日韩亚洲欧美成人| 成人激情电影一区二区| 91青草视频久久| 欧美在线www| 午夜精品久久久久久久99热浪潮| 久99九色视频在线观看| 久久国产精彩视频| 日本免费久久高清视频| 热久久视久久精品18亚洲精品| 国产亚洲精品久久久久久牛牛| 欧美电影在线观看高清| 一区二区欧美日韩视频| 欧美激情a∨在线视频播放| 国产精品免费视频xxxx| 欧美日韩电影在线观看| 欧美日韩国产综合视频在线观看中文| 精品国产91久久久久久老师| 国产综合久久久久| 91免费人成网站在线观看18| 在线观看91久久久久久| 美女av一区二区| 欧美性猛交xxxx黑人猛交| 国内精品免费午夜毛片| 57pao成人永久免费视频| 91影视免费在线观看| 国产91久久婷婷一区二区| 日韩av免费在线播放| 亚洲免费一在线| 久久久久久久999精品视频| 成人www视频在线观看| 欧美日韩亚洲一区二区| 精品欧美一区二区三区| 成人国产精品久久久| 国产精品久久久久久亚洲影视| 精品日韩中文字幕| 欧美性xxxx极品高清hd直播| 伊人久久久久久久久久久久久| 亚洲级视频在线观看免费1级| 国产综合久久久久| 95av在线视频| 日韩视频一区在线| 欧美激情三级免费| 日本三级久久久| 国产一区二区日韩精品欧美精品| 久久6精品影院| 欧美成人性色生活仑片| 国产在线播放91| 国产成人久久久精品一区| 国产免费观看久久黄| 欧美日韩另类字幕中文| 欧美日韩中文字幕在线| 一本一道久久a久久精品逆3p| 精品露脸国产偷人在视频| 亚洲欧美999| 91精品久久久久| 亚洲午夜色婷婷在线| 欧美专区在线视频| 亚洲精品福利在线| 欧美午夜精品伦理|