RestTemplateを使用してコード内でPOST要求を呼び出すパラメータの文字化けしの問題
2011 ワード
背景:プロジェクトAコードの内部で、プロジェクトBのrestfulインタフェースCを呼び出して、私達はRestTemplateを採用して呼び出して、しかし呼び出しの過程の中で、ずっと正常にデータを返すことができなくて、ログはパラメータが文字化けしていることを表示します(あるパラメータの値は中国語です)
文字化けしの原因:要求方式はPOSTですが、私たちはパラメータをurlに置いたのですか?後は、パラメータ伝達形式はGETリクエストと同じ!!!
要求方式はPOSTであるため、パラメータをbodyの中に入れて渡す必要があり、パラメータはMultiValueMap構造体で積載する必要があり、以下に示す(RestTemplateの呼び出しは以下に変更すればよい):
または別の方法:
postParam:postリクエスト時のbody内のパラメータ
url:urlの後に続く他のパラメータを含む
起動クラスにrestTemplateをロードする場合は、UTF-8に設定する必要があります.
転載先:https://www.cnblogs.com/miaoying/p/9964649.html
文字化けしの原因:要求方式はPOSTですが、私たちはパラメータをurlに置いたのですか?後は、パラメータ伝達形式はGETリクエストと同じ!!!
要求方式はPOSTであるため、パラメータをbodyの中に入れて渡す必要があり、パラメータはMultiValueMap構造体で積載する必要があり、以下に示す(RestTemplateの呼び出しは以下に変更すればよい):
if (method == HttpMethod.POST) {
MultiValueMap postParameters = new LinkedMultiValueMap<>();
map.forEach((k, v) -> {
postParameters.add(k, v.toString());
});
return JSON.parseObject(restTemplate.postForObject(url, postParameters, String.class));
}
または別の方法:
postParam:postリクエスト時のbody内のパラメータ
url:urlの後に続く他のパラメータを含む
restTemplate.postForObject(url.toString(), new HttpEntity<>(postParam), String.class);
起動クラスにrestTemplateをロードする場合は、UTF-8に設定する必要があります.
@Bean
public RestTemplate getRestTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
return restTemplate;
}
転載先:https://www.cnblogs.com/miaoying/p/9964649.html