Resttemplate請求中文亂碼
1 概述
解決RestTemplate請求中文亂碼問題枣察。
如果是StringHttpMessageConverter,則修改器默認字符集:ISO-8859-1為utf-8,對于postForObject 底層均采用了MappingJackson2HttpMessageConverter來處理請求。
對于String格式提交數(shù)據(jù)時蝌以,底層其實采用的是StringHttpMessageConverter來處理請求。
1.1 RestTemplateUtil
package com.kikop.localribbonclient.util;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.Charset;
import java.util.List;
/**
@author kikop
@version 1.0
@project Name: myribboninaction
@file Name: RestTemplateUtil
@desc 功能描述 解決RestTemplate請求中文亂碼
@date 2020/2/9
@time 14:46
@by IDE: IntelliJ IDEA
@sample https://blog.csdn.net/mryang125/article/details/80963280
*/
public class RestTemplateUtil {
/**
* 獲取restTemplate實例
*
* @param charset utf-8
* @return
*/
public static RestTemplate getInstance(String charset) {
// 如果是StringHttpMessageConverter,則修改器默認字符集:ISO-8859-1為utf-8
// postForObject 底層均采用了MappingJackson2HttpMessageConverter來處理請求
// String格式提交數(shù)據(jù)時捶牢,底層其實采用的是StringHttpMessageConverter來處理請求
RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> list = restTemplate.getMessageConverters();
for (HttpMessageConverter<?> httpMessageConverter : list) {
if (httpMessageConverter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(Charset.forName(charset));
break;
}
}
return restTemplate;
}
}
1.2使用
package com.kikop.localribbonclient.controller;
import com.kikop.localribbonclient.util.RestTemplateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
/**
@author kikop
@version 1.0
@project Name: myribboninaction
@file Name: RibbonController
@desc 功能描述
@date 2020/2/9
@time 11:02
@by IDE: IntelliJ IDEA
*/
@RestController
public class RibbonController {
@Autowired
private LoadBalancerClient loadBalancer;
@GetMapping("/testRibbon")
public String testRibbon() {
ServiceInstance instance = loadBalancer.choose("stores");
return instance.getHost() + ":" + instance.getPort();
}
@GetMapping("/testReqDomain")
public String testReqDomain() {
ServiceInstance instance = loadBalancer.choose("stores");
String reqServerUrl = String.format("http://%s:%d", instance.getHost(), instance.getPort());
System.out.println(reqServerUrl);
RestTemplate restTemplate = RestTemplateUtil.getInstance("utf-8");
return restTemplate.getForObject(reqServerUrl, String.class);
}
}
參考
- 初探RestTemplate--解決中文亂碼問題
<u>https://blog.csdn.net/mryang125/article/details/80963280</u>