最近使用RestTemplate發送post請求,遇到了很多問題,如轉換httpMessage失敗、中文亂碼等,調了好久才找到下面較為簡便的方法:
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
JSONObject jsonObj = JSONObject.fromObject(params);
HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers);
String result = restTemplate.postForObject(url, formEntity, String.class);
如果直接使用在postForObject中把對象傳入很容易出現no suitable HttpMessageConverter found for request type的錯誤,建議直接先轉成字符串,見jsonObj.otString(),網上有人說設置RestTemplate的HttpMessageConverter,試了一下要引入各種包。另外要注意中文編碼問題,網上有人說StringHttpMessageConverter默認使用ISO-8859-1,要指定為UTF-8編碼,自己嘗試沒有成功,最后通過指定contentType的方式解決了。