最近學習使用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...,江湖救急,跪謝大神?。?
添加回答
舉報
0/150
提交
取消
