RestTemplate發送x-www-form-urlencoded的數據

問題描述

有個項目接口需要傳送一個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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章