spring cloud学习(三)-RestTemplate的用法

什么是RestTemplate

RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。RestTemplate 继承自 InterceptingHttpAccessor 并且实现了 RestOperations 接口,其中 RestOperations 接口定义了基本的 RESTful 操作,这些操作在 RestTemplate 中都得到了实现。接下来我们就来看看这些操作方法的使用。

如何使用 

首先我们创建一个普通的maven工程、然后分别创建eureka、provider、consumer三个SpringBoot子工程项目、然后分别在application.properties或者application.yml进行配置

在使用RestTemplate内的方法之前需要将RestTemplate加入到容器中

@Configuration
public class ApplicationConfig {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

RestTemplate中getForObject方法的使用

getForObject 方法和 getForEntity 方法类似,getForObject 方法也有三个重载的方法,参数和 getForEntity 一样,因此这里我就不重复介绍参数了,这里主要说下 getForObject 和 getForEntity 的差异,这两个的差异主要体现在返回值的差异上, getForObject 的返回值就是服务提供者返回的数据,使用 getForObject 无法获取到响应头。例如,还是上面的请求,利用 getForObject 来发送 HTTP 请求,结果如下
此处为服务消费者端

spring cloud学习(三)-RestTemplate的用法_第1张图片

测试结果为:

spring cloud学习(三)-RestTemplate的用法_第2张图片


RestTemplate中getForEntity方法的使用

我们要了解RestTemplate 发送的是Http请求,那么响应数据一定是有响应头的,如果需要获取响应头的信息,那么就可以使用getForEntity来发送Http请求,此时返回的就是一个ResponseEntity的实例,这个实例包含看响应头和响应的数据,例如下面的这个接口是来自provider 中的

@GetMapping("/consumer/payment/getforentity/list")
    public JsonResult getListEntity(){
        ResponseEntity forEntity = restTemplate.getForEntity(PAYMENT_URL + "/payment/list", JsonResult.class);
        if (forEntity.getStatusCode().is2xxSuccessful()){
            return  forEntity.getBody();
        }else {
            return  new JsonResult<>(500,"操作失败!!!");
        }
    }

测试结果如下:

spring cloud学习(三)-RestTemplate的用法_第3张图片

总结:

本文主要向大家介绍了 RestTemplate 这样一个 HTTP 请求工具类的常见用法,一些比较冷门的用法本文并未涉及,读者有兴趣可以自行查找资料学习。由于 Spring、SpringMVC、Spring Boot、Spring Cloud 这些家族成员一脉相承,因此在 SpringMVC 中支持良好的 RESTful 风格的接口在后续的各个组件中都继续支持,在微服务接口设计时,大部分接口也都满足 RESTful 风格,使用 RestTemplate 则可以非常方便地发送 RESTful 风格的请求,因此这个工具的使用是我们后面学习的基础,常见的用法一定要熟练掌握。

你可能感兴趣的:(spring,cloud)