亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請教一個Restemplate遠程調用騰訊云API的問題

請教一個Restemplate遠程調用騰訊云API的問題

慕仙森 2019-01-18 20:30:46
最近學習使用Spring的Restemplate進行遠程調用接口,騰訊那邊的API文檔要求的是json格式,需要設置請求頭有三個字段:Host,Content-Type,Authorization(具體可看API文檔:https://cloud.tencent.com/doc...,請求參數數據可用,編碼如下 public R checkPhoto(Map<String,Object> param){ // 通過param可以拿到需要的參數 ...... String authtion = null; try { // 簽名有效時長為 3600 秒 authtion = SignUtil.appSign(appid,g.getSecretId(),g.getSecretKey(),Constant.TX_COS_BUCKET_AUTHINFO,3600); } catch (Exception e) { e.printStackTrace(); log.error("簽名生成失敗"); return R.error("簽名生成失敗"); } // 設置請求頭 HttpHeaders requestHeader = new HttpHeaders(); requestHeader.setContentType(MediaType.APPLICATION_JSON); requestHeader.add("Host","recognition.image.myqcloud.com"); requestHeader.add("Authorization",authtion); // 設置請求體參數 Map<String,Object> paramMap = new HashedMap(); paramMap.put("appid",appid); paramMap.put("urlA",urlA); paramMap.put("urlB",urlB); // 轉換參數為 JSON 對象并調用postForObject發起post請求 String str = JSON.toJSONString(paramMap); JSONObject json = JSON.parseObject(str); HttpEntity<JSONObject> request = new HttpEntity<JSONObject>(json,requestHeader); String response = this.restTemplate.postForObject(Constant.TX_FACE_URL_HTTP,request,String.class); ....... } 這里貼出Service的部分代碼,請教各位大神為什么使用JSONObject的請求參數會報錯400,而下面我使用POJO的方式,將請求參數封裝起來可以得到成功調用 public R checkPhoto(Map<String,Object> param){ // 通過param可以拿到需要的參數 ...... String authtion = null; try { // 簽名有效時長為 3600 秒 authtion = SignUtil.appSign(appid,g.getSecretId(),g.getSecretKey(),Constant.TX_COS_BUCKET_AUTHINFO,3600); } catch (Exception e) { e.printStackTrace(); log.error("簽名生成失敗"); return R.error("簽名生成失敗"); } // 設置請求頭 HttpHeaders requestHeader = new HttpHeaders(); requestHeader.setContentType(MediaType.APPLICATION_JSON); requestHeader.add("Host","recognition.image.myqcloud.com"); requestHeader.add("Authorization",authtion); // *******************區別上一份代碼**************************// // 設置請求體參數 TxAPIDto dto = TxAPIDto.builder().appid(g.getAppId()).urlA(urlA).urlB(urlB).build(); HttpEntity<TxAPIDto> request = new HttpEntity(dto,requestHeader); ResponseEntity<TxAPIDto> apiresponse = this.restTemplate.exchange(Constant.TX_FACE_URL_HTTP, HttpMethod.POST,request,TxAPIDto.class); TxAPIDto respnose = apiresponse.getBody(); ....... } 使用DTO的方式可以成功調用,但是使用這種方式繼續調用騰訊OCR識別接口(相比上一個接口參數和返回內容復雜了些,API:https://cloud.tencent.com/doc...,江湖救急,跪謝大神?。?
查看完整描述

3 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

最后發現是騰訊接口的尿性,參數值是動態的圖片鏈接,換成最新的就好了!

查看完整回答
反對 回復 2019-02-12
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

有DTO為啥要用JsonObject…

查看完整回答
反對 回復 2019-02-12
  • 3 回答
  • 0 關注
  • 850 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號