問題描述
有個項目接口需要傳送一個x-www-form-urlencoded的參數,key=data,value={json的map}
一開始用一個字符串拼接,把字符串拼接爲如下樣式:
String param = "data=
{
"aa": "123456789",
"bb": "11",
"cc": "梁寶寶"
}"
然後直接把這個字符串當做參數傳過去:
RestTemplate restTemplate = RestTemplateUtil.getInstance("utf-8", true, true);
Map result = restTemplate.postForObject(URL, param , Map.class);
結果人家就返回報錯說讀取不到參數。
解決辦法
設置請求頭和設置請求參數,然後把封裝過後的HttpEntity作爲參數傳過去,問題解決。
// 轉換參數格式
String json = JSON.toJSONString(params);
// 設置請求頭
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/x-www-form-urlencoded");
// 設置請求參數
MultiValueMap<String, Object> postParameters = new LinkedMultiValueMap<>();
postParameters.add("data", json);
HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(postParameters, headers);
RestTemplate restTemplate = RestTemplateUtil.getInstance("utf-8", true, true);
Map result = restTemplate.postForObject(URL, httpEntity, Map.class);