0%

RestTemplate在非springboot工程中的使用

问题的引出

RestTemplate 是spring提供的访问rest接口的类,RestTemplate提供了多种便捷访问http服务的方法,使得调用rest接口更容易,记得在以前的代码中发送http请求我们还使用 HttpClient 或者 OkHttp 但其有如下的问题

  1. 代码复杂
  2. 需要操心资源回收等细节问题
  3. 每个项目组都有自己的一套http工具类,重复造轮子

现在我基本上用RestTemplate代替了以前自己写的工具类。

本文不讲RestTemplate的普遍使用方法,而是讲在非springboot工程中如何使用RestTemplate

那为什么会有这样的场景呢?举个例子:我们要开发一个jar包提供给其他人,并集成到别人的工程中使用,该jar包封装对某短信接口的请求细节,别人只需要引入我们的jar包然后调用相关类即可,不用关心具体的http请求细节,因为我们提供的是一个很小的jar包,而不是一个完整的工程,所以再去用springboot那套就不合适了。

大部分情况下我们的工程都是基于springboot或者spring系的,使用RestTemplate很简单,直接自动注入即可。

那在脱离了spring系的工程中我们还能开心的使用RestTemplate么?

在非springboot工程中使用RestTemplate

步骤 pom.xml 中添加依赖

1
2
3
4
5
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>

步骤 代码中使用

1
2
3
4
5
RestTemplate restTemplate=new RestTemplate();
HttpHeaders headers=new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
HttpEntity requestEntity=new HttpEntity<>(bean,headers);
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST,requestEntity,String.class);

以前spring帮我们初始化RestTemplate,现在我们需要自己new 对象了,其它使用方式没有区别。

关于初始化RestTemplate的说明

1
2
3
RestTemplate restTemplate = new RestTemplate();
RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
RestTemplate restTemplate = new RestTemplate(new OkHttp3ClientHttpRequestFactory());

实际上RestTemplate自己并不实现具体的http操作,其只是对已有类库进行了封装,而其具体实现仍然依赖底层的类库

  1. 上面第一种初始化方法 其使用JDK自带的 HttpURLConnection
  2. 第二种初始化方法 使用的是 HttpClient 库
  3. 第三种初始化方法 使用的是 OkHttp 库

所以如果对具体使用的类库有要求的话,应该在初始化时指定具体的工厂类,当然还需要添加相关的依赖

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>

<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.11.0</version>
</dependency>

微信端的朋友也可关注我的公众号

小马向前走

qrcode-12cm