Spring resttemplate中用utf-8提交json數據
在 Spring 框架中,RestTemplate 在向 RESTful 資源發送各種 http 請求方面非常有用,這篇文章展示瞭如何設定 Content-Type、Accept 標頭以及內容編碼的簡單範例,這在使用非 ascii(例如 CJK 語言)資料請求時尤其重要。
Initialize RestTemplate
import java.nio.Charset;
import java.util.Arrays;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpEntity;
import org.springframework.http.MediaType;
import org.springframework.http.converter.StringHttpMessageConverter;
import com.fasterxml.jackson.databind.ObjectMapper;
RestTemplate restTemplate = new RestTemplate();
Set Content-Type
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
Set Accept
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8")));
Set encoding - option 1
restTemplate
.getMessageConverters()
.add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
Set encoding - option 2
MediaType mediaType = new MediaType("application", "json", Charset.forName("UTF-8"));
httpHeaders.setContentType(mediaType);
Post request
XObject xObject = new XObject();
xObject.setFieldA("a");
xObject.setFieldB("b");
ObjectMapper objectMapper = new ObjectMapper();
String payload = objectMapper.writeValueAsString(xObject);
HttpEntity<String> httpEntity = new HttpEntity<String>(payload, httpHeaders);
YObject yObject = restTemplate.postForObject(httpUrl, httpEntity, YObject.class);
參考文獻