JavaSpring之RestTemplate的使用

Posted H__D

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSpring之RestTemplate的使用相关的知识,希望对你有一定的参考价值。

RestTemplate介绍

  调用远程服务时就必须使用HTTP客户端,主要有四种:JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client, Spring的RestTemplate。  

  解放了原先HttpClient的复杂提交,java中调用RESTful服务很典型的是使用HttpClient,对于常用的REST操作,这些方法属于低等级的操作。使用HttpClient我们需要自己封装Post请求,再根据响应的状态码判断从响应中获取header和body,有时候还需要自己做json转换。

  Spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接, 我们只需要传入url及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。

  在Spring应用程序中访问第三方REST服务与使用Spring RestTemplate类有关。RestTemplate类的设计原则与许多其他Spring *模板类(例如JdbcTemplate、JmsTemplate)相同,为执行复杂任务提供了一种具有默认行为的简化方法。

  RestTemplate默认依赖JDK提供http连接的能力(HttpURLConnection),如果有需要的话也可以通过setRequestFactory方法替换为例如 Apache HttpComponents、Netty或OkHttp等其它HTTP library。

  考虑到RestTemplate类是为调用REST服务而设计的,因此它的主要方法与REST的基础紧密相连就不足为奇了,后者是HTTP协议的方法:HEAD、GET、POST、PUT、DELETE和OPTIONS。例如,RestTemplate类具有headForHeaders()、getForObject()、postForObject()、put()和delete()等方法。

RestTemplate实现

  最新api地址:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html

  RestTemplate包含以下几个部分:

  • HttpMessageConverter 对象转换器
  • ClientHttpRequestFactory 默认是JDK的HttpURLConnection
  • ResponseErrorHandler 异常处理
  • ClientHttpRequestInterceptor 请求拦截器

  RestTemplate是spring的一个rest客户端,在spring-web这个包下,spring boot的依赖如下:

1 <dependency>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring-boot-starter-web</artifactId>
4 </dependency>

  点进去可以看到spring-web

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

  所以如果在非spring的框架下直接引入spring-web这个包即可。

  RestTemplate有三个实现

 1 package org.springframework.web.client;
 2 
 3 public class RestTemplate extends InterceptingHttpAccessor implements RestOperations {
 4 
 5     ...
 6 
 7     public RestTemplate() {
 8         ...
 9     }
10 
11     public RestTemplate(ClientHttpRequestFactory requestFactory) {
12         ...
13     }
14 
15     public RestTemplate(List<HttpMessageConverter<?>> messageConverters) {
16         ...
17     }
18 }

RestTemplate使用

  1、新建一个Maven工程,引入依赖spring-web

技术图片
1 <dependency>
2     <groupId>org.springframework</groupId>
3     <artifactId>spring-web</artifactId>
4     <version>5.1.9.RELEASE</version>
5 </dependency>
View Code

  2、

 

 

 

 

 

 

以上是关于JavaSpring之RestTemplate的使用的主要内容,如果未能解决你的问题,请参考以下文章

Spring之RestTemplate常用API实践

Spring之RestTemplate常用API实践

springcloud费话之Eureka服务访问(restTemplate)

Spring RestTemplate 之get请求

SpringBoot系列之RestTemplate使用示例

SpringBoot系列之实现RestTemplate Get请求传javabean参数