笔记:Spring Cloud Ribbon RestTemplate 详解

详细介绍RestTemplate
针对几种不同请求类型和参数类型的服务调用实现,示例代码中的
restTemplate
都是通过Spring
注入方式创建的,相关代码如下:

@Autowired

private RestTemplate restTemplate;

?
?

在应用主类需要增加
Bean,代码如下:

@LoadBalanced

@Bean

public RestTemplate createRestTemplate(){

????????return new
RestTemplate();

}

  • GET 请求


    RestTemplate
    中,对GET请求可以通过如下方法进行调用:

    • getForEntity
      方法:该方法返回的是
      ResponseEntity,该对象是Spring

      HTTP
      请求响应对象的封装,其中主要存储了
      HTTP
      的几个重要元素,比如
      HTTP
      请求状态的枚举对象
      HTTPStatus
      、在他的父类
      HTTPEntity
      中还存储着
      HTTP
      的头信息对象
      HTTPHeaders
      以及泛型类型的请求体对象,例如,如下代码访问服务的 /get
      请求,由于第二个参数为
      String.class
      因此返回的
      ResponseEntity
      对象中的
      body
      内容类型转换为字符串返回:

    ????????????
    ResponseEntity<String> responseEntity = null;

????????????????????????responseEntity =

????????????????????????????????????????restTemplate.getForEntity("http://ORG.DRSOFT.WEBSERVICE.HELLOSERVICE/hello/get, String.class);

????????????????????????if (responseEntity.getStatusCode() == HttpStatus.OK) {

????????????????????????????????return responseEntity.getBody();

????????????????????????}

????????????????????????return
"response status " + responseEntity.getStatusCodeValue();

  • getForObject
    方法:该方法可以理解为对getForEntity
    的进一步封装,通过
    HttpMessageConverterExtractor

    HTTP
    请求响应体
    body
    聂荣进行对象转换,实现请求直接返回包装好的对象内容:

    ??String body =

    ??????????????????restTemplate.getForObject("http://ORG.DRSOFT.WEBSERVICE.HELLOSERVICE/hello/get", String.class);

  • POST 请求

    在RestTemplate
    中,对
    POST
    请求可以通过如下三个方法进行调用实现。

    • postForEntity
      方法:该方法同GET请求中的
      getForEntity
      类似,会在调用后返回
      ResponseEntity<T>对象,其中
      T
      为请求响应的
      body
      类型,示例代码如下:

    ????????????User user = new
    User("didi",30);

    ????????????ResponseEntity<String> responseEntity =

    ????????????
    restTemplate.postForEntity("http://ORG.DRSOFT.WEBSERVICE.HELLOSERVICE/hello/post",user,String.class);

    ????????????String body = responseEntity.getBody();

    这里需要注意的是新增加的
    request
    参数,该参数可以是一个普通对象,也可以是一个
    HttpEntity
    对象,如果是一个普通对象时,RestTemplate
    会将请求对象转换为一个
    HttpEntity
    对象来处理,并且把该对象视为完整的
    body
    来处理;如果是一个
    HttpEntity
    对象,那么就会当作一个完整的HTTP
    请求对象来处理,这个对象不仅包含了
    body
    内容,也包含了
    header
    内容,示例代码如下:

    ResponseEntity<String> responseEntity = null;

    HttpHeaders headers = new
    HttpHeaders();

    List<MediaType> accept = new LinkedList<>();

    accept.add(MediaType.APPLICATION_JSON_UTF8);

    headers.setAccept(accept);

    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

    ?
    ?

    MultiValueMap<String, String> postParameters = new LinkedMultiValueMap<>();

    postParameters.add("id", "11");

    postParameters.add("name", "aoa");

    postParameters.add("comment", "");

    ?
    ?

    HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(postParameters, headers);

    ?
    ?

    responseEntity =

    ??????????????restTemplate.postForEntity("http://ORG.DRSOFT.WEBSERVICE.HELLOSERVICE/webapi/hello/post", requestEntity, String.class);

    String body = responseEntity.getBody();

    ?
    ?

    • postForObject
      方法:该方法跟
      getForObject
      的类型类似,他的做用是简化
      postForEntity
      的后续处理,通过直接将请求响应的
      body
      内容包装成对象来返回使用,示例代码如下:

    ????????????User user = new
    User("didi",30);

    ????????????String body =

    ???????????
    ? restTemplate..postForObject("http://ORG.DRSOFT.WEBSERVICE.HELLOSERVICE/hello/post",user,String.class);

    • postForLocation 方法:该方法实现了以
      POST
      请求提交资源,并返回资源的
      URI,该
      URI
      就相当于指定了返回类型,所以此方法实现的
      POST
      请求不需要像
      postForEntity

      postForObject
      那样指定
      responseType,示例代码如下:

    ????????????User user = new
    User("didi",30);

    ????????????URI responseURI =

    restTemplate.postForLocation("http://ORG.DRSOFT.WEBSERVICE.HELLOSERVICE/hello/post",user);

  • PUT 请求


    RestTemplate
    中,对与
    put
    请求其返回为
    void
    类型,没有返回内容,因此,就没有其他函数定义的
    responseType
    参数,除此之外的其他传入参数定义与用法与
    postForObject
    基本一致,示例代码如下:

    Map<String, String> map = new HashMap<>();

    map.put("put1", "23434");

    map.put("put2", "3544545");

    ????????????????
    ?

    restTemplate.put("http://ORG.DRSOFT.WEBSERVICE.HELLOSERVICE/webapi/hello/put/{0}/{1}", map, 123213, "桑德兰副科级");

  • DELETE请求


    RestTemplate
    中,对 DELETE 请求可以通过
    delete
    方法进行调用实现,和put请求一致,其返回类型为
    void
    类型,因此
    DELETE
    请求不需要返回数据,示例代码如下:

    ?Integer id = 100;

    ?restTemplate.delete("http://ORG.DRSOFT.WEBSERVICE.HELLOSERVICE/hello/delete?id={1}", id);

时间: 2024-11-05 21:49:26

笔记:Spring Cloud Ribbon RestTemplate 详解的相关文章

基于Spring Cloud的微服务构建学习-3 Spring Cloud Eureka配置详解

配置详解 在Eureka的服务治理体系中,主要分为服务端与客户端.服务端为服务注册中心,而客户端为各个提供接口的微服务应用.当部署高可用注册中心时,每个服务端也已经成为了客户端,因此,在使用Spring Cloud Eureka的过程中,我们所做的配置内容几乎都是对Eureka客户端配置进行的操作,所以了解这部分的配置内容,对于用好Eureka非常有帮助. 而Eureka服务端更多类似于一个现成产品,大多数情况下,我们不需要修改它的配置信息. Eureka客户端配置分类 服务注册相关配置,包括服

笔记:Spring Cloud Ribbon 客户端配置详解

自动化配置 由于 Ribbon 中定义的每一个接口都有多种不同的策略实现,同时这些接口之间又有一定的依赖关系,Spring Cloud Ribbon 中的自动化配置能够很方便的自动化构建接口的具体实现,接口如下: IClientConfig:Ribbon 的客户端配置,默认采用 com.netflix.client.config.DefaultClientConfigImpl 实现. IRule:Ribbon 的负载均衡策略,默认采用 com.netflix.loadbalancer.ZoneA

笔记:Spring Cloud Ribbon 客户端负载均衡

Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,基于 Netflix Ribbon 实现,通过Spring Cloud 的封装,可以让我们轻松的将面向服务的REST 模板请求自动转换为客户端负载均衡的服务调用.客户端负载均衡在系统架构中是一个非常重要的,并且是不得不去实施的内容,因为负载均衡是对系统的高可用.网络压力的缓解和处理能力扩容的重要手段,客户端负载均衡需要通过心跳去维护服务端清单的健康性,这个需要服务注册中心配合完成,在Spring Cl

撸一撸Spring Cloud Ribbon的原理-负载均衡策略

在前两篇<撸一撸Spring Cloud Ribbon的原理>,<撸一撸Spring Cloud Ribbon的原理-负载均衡器>中,整理了Ribbon如何通过负载均衡拦截器植入RestTemplate,以及调用负载均衡器获取服务列表,如何过滤,如何更新等的处理过程. 因为,负载均衡器最终是调用负载均衡策略的choose方法来选择一个服务,所以这一篇,整理Ribbon的负载均衡策略. 策略类 RandomRule RoundRobinRule RetryRule WeightedR

第四章 客户端负载均衡:Spring Cloud Ribbon

Spring Cloud R巾bon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 NetflixRibbon 实现. 通过 Spring Cloud 的封装, 可以让我们轻松地将面向服务的 REST 模板请求自动转换成客户端负载均衡的服务调用 客户端负载均衡 我们通常所说的负载均衡都指的是服务端负载均衡, 其中分为硬件负载均衡和软件负载均衡. 硬件负载均衡主要通过在服务器节点之间安装专门用于负载均衡的设备,比如 F5 等:而软件负载均衡则是通过在服务器上安装一些具有均衡负载功

Spring Cloud Ribbon快速搭建

Spring Cloud Ribbon 是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过 Spring Cloud 的封装, 可以让我们轻松地将面向服务的 REST 模板请求自动转换成客户端负载均衡的服务调用.在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign. 一般说的 负载均衡 是指 服务器端的

Greenwich.SR2版本的Spring Cloud Ribbon实例

上次我们了解了eureka(参见Greenwich.SR2版本的Spring Cloud Eureka实例),里面的服务消费方我们其实已经用到了ribbon.在pom里我们引入了 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency&

Spring Cloud Ribbon

Spring Cloud Ribbon:负载均衡的服务调用 前言 什么是Ribbon? Spring Cloud Ribbon是一套实现客户端负载均衡的工具,注意是客户端,当然也有服务端的负载均衡工具,如Ngnix,可以认为Ribbon就是一个负载均衡(Load Balancer).负载均衡就是将用户的请求平摊的分配到多个服务器,从而达到系统的高可用. 简单来说,Ribbon的主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起. 在微服务架构中,很多服务都会部署多个,

学习笔记——Maven settings.xml 配置详解

文件存放位置 全局配置: ${M2_HOME}/conf/settings.xml 用户配置: ${user.home}/.m2/settings.xml note:用户配置优先于全局配置.${user.home} 和和所有其他系统属性只能在3.0+版本上使用.请注意windows和Linux使用变量的区别. settings.xml详解 声明规范 <?xml version="1.0" encoding="UTF-8"?> <settings x