RestTemplate介紹
RestTemplate是Spring提供的用于訪問RESTful服務的客戶端,RestTemplate提供了多種便捷訪問遠程Http服務的方法,能夠大大提高客戶端的編寫效率。RestTemplate默認依賴JDK提供http連接的能力(HttpURLConnection),也可以通過替換為例如Apache HttpComponents、Netty或OkHttp等其它HTTP客戶端 ,OkHttp的性能優越 ,本項目使用OkHttp,官 網 :Overview - OkHttp,github: https://github.com/square/okhttp。
RestTemplate效果測試
1.依賴
<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId>
</dependency>
2.配置?
@Bean
public RestTemplate restTemplate() {return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
}
3.測試類
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.client.RestTemplate;@RunWith(SpringRunner.class)
@SpringBootTest
public class TemplateTest {@Autowiredprivate RestTemplate restTemplate;@Testpublic void test(){String url = "http://www.baidu.com";ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);System.out.println("網頁結果:"+forEntity.getBody());}}
?
網頁內容中中文亂碼解決方案:
原因:
當RestTemplate默認使用String存儲body內容時默認使用ISO_8859_1字符集。
解決:
配置StringHttpMessageConverter 消息轉換器,使用utf-8字符集。
修改RestTemplate的定義方法
@Beanpublic RestTemplate restTemplate(){RestTemplate restTemplate = new RestTemplate(new OkHttp3ClientHttpRequestFactory());//獲取配置轉換器List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();//設置編碼格式messageConverters.set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));//將轉換器修改后的對象再賦值回去,對原來對象屬性進行修改restTemplate.setMessageConverters(messageConverters);return restTemplate;}
OkHttp3ClientHttpRequestFactory()
Ctrl+單擊點進去查看源碼
繼續跟進
?光標在接口上ClientHttpRequestFactory
快捷鍵Ctrl+Alt+鼠標單擊查看實現類,或者快捷鍵Ctrl+h,即可看到OkHttp3ClientHttpRequestFactory()