使用restTemplate訪問其他接口時 採用post方式傳參 發現服務端接受不到參數 坑了半天 記錄一下
服務端是個Servlet 以post接參 所以本地使用mvc模擬了一下 方便調試 代碼如下:
@RequestMapping(value = "callBack",method = RequestMethod.POST)
public void getCallBack(HttpServletRequest req, HttpServletResponse res){
String param = req.getParameter("param");
//後面省略
}
客戶端代碼如下:
@Test
public void test1(){
HttpHeaders headers = new HttpHeaders();
//設置請求頭內容 一般以表單形式提交 不要輕易修改(易出錯點)
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
//設置請求頭內容
headers.setAccept(Arrays.asList(new MediaType[] { new MediaType("application", "json"
, Charset.forName("UTF-8")) }));
//不能以Map或HashMap代替 否則服務端接收不到參數(易出錯點)
MultiValueMap<String,Object> params = new LinkedMultiValueMap<String, Object>();
Map<String,Object> params1 = new HashMap<String, Object>();
params.add("param","參數");
//使用HTTP報文實體
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String,Object>>(params,headers);
//JSONObject post_result = new JSONObject();
RestTemplate restTemplate = new RestTemplate();
Object o = restTemplate.exchange("http://localhost:6070/callBack", HttpMethod.POST, requestEntity, Object.class).getBody();
System.out.println("返回值:"+o);
System.out.println("調用完畢了");
}
單元測試時發現param參數以取到 測試測試成功!!!!!