优秀的编程知识分享平台

网站首页 > 技术文章 正文

RestTemplate技术预研——OkHttp(预研与技术开发流程)

nanyue 2024-09-08 06:07:10 技术文章 6 ℃

1.认识RestTemplate

RestTemplate是Spring提供的用于访问RESTful服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。RestTemplate默认依赖JDK提供http连接的能力(HttpURLConnection),也可以通过替换为例如 Apache HttpComponents、Netty或OkHttp等其它HTTP 客户端,OkHttp的性能优越

2.工程中引入OkHttp依赖

<!‐‐ okhttp3依赖 ‐‐>
<dependency>
	<groupId>com.squareup.okhttp3</groupId>
	<artifactId>okhttp</artifactId>
	<version>3.9.1</version>
</dependency>

3.添加RestTemplate初始化

@Bean
public RestTemplate restTemplate() {
	return new RestTemplate(new OkHttp3ClientHttpRequestFactory())  ;
}

4.使用RestTemplate获取百度的网页内容

@SpringBootTest
@RunWith(SpringRunner.class)
@Slf4j
public class RestTemplateTest {
	@Autowired
	RestTemplate restTemplate;
	//获取网页内容
	@Test
	public void gethtml(){
		String url = "http://www.baidu.com/";
		ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
		String body = forEntity.getBody();
		System.out.println(body);
	}
}

通过测试发现可以成功获取百度的网页内容

5.网页内容中中文乱码解决方案

原因:
当RestTemplate默认使用String存储body内容时默认使用ISO_8859_1字符集。
解决:
配置StringHttpMessageConverter 消息转换器,使用utf-8字符集。

修改RestTemplate的定义方法:

@Bean
public RestTemplate restTemplate() {
	RestTemplate restTemplate = new RestTemplate(new OkHttp3ClientHttpRequestFactory());
	//消息转换器列表
	List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
	//配置消息转换器StringHttpMessageConverter,并设置utf‐8
	messageConverters.set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));//支持中文字符集,默认ISO‐8859‐1,支持utf‐8
	return restTemplate;
}
最近发表
标签列表