详细介绍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);

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

  1. Spring Cloud Ribbon配置详解

    概述 有时候需要自定义Ribbon的配置和客户端超时配置. 自动化配置 /* 使用属性自定义功能区客户端 从版本1.2.0开始,Spring Cloud Netflix现在支持使用属性与Ribbon文 ...

  2. Spring Cloud限流详解

    转自:https://blog.csdn.net/tracy38/article/details/78685707 在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud ...

  3. Spring Cloud Feign原理详解

    目录 1.什么是Feign? 2.Open Feign vs Spring Cloud Feign 2.1.OpenFeign 2.2.Spring Cloud Open Feign 3.Spring ...

  4. SpringCloud入门之应用程序上下文服务(Spring Cloud Context)详解

    构建分布式系统非常复杂且容易出错.Spring Cloud为最常见的分布式系统模式提供了简单易用的编程模型,帮助开发人员构建弹性,可靠和协调的应用程序.Spring Cloud构建于Spring Bo ...

  5. Spring Boot的前世今生以及它和Spring Cloud的关系详解。

    要了解Spring Boot的发展背景,还得从2004年Spring Framework1.0版本发布开始说起,不过大家都是从开始学习Java就使用Spring Framework了,所以就不做过多展 ...

  6. Spring Cloud Eureka配置文件详解

    本篇内容用来说明Eureka 常用配置的含义. 以下配置都是以 eureka.server 开头: 参数 描述 备注 eureka.server.eviction-interval-timer-in- ...

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

    自动化配置 由于 Ribbon 中定义的每一个接口都有多种不同的策略实现,同时这些接口之间又有一定的依赖关系,Spring Cloud Ribbon 中的自动化配置能够很方便的自动化构建接口的具体实现 ...

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

    Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,基于 Netflix Ribbon 实现,通过Spring Cloud 的封装,可以让我们轻松的将面向服 ...

  9. Spring RestTemplate详解

    Spring RestTemplate详解   1.什么是REST? REST(RepresentationalState Transfer)是Roy Fielding 提出的一个描述互联系统架构风格 ...

随机推荐

  1. android自定义View的绘制原理

    每天我们都会使用很多的应用程序,尽管他们有不同的约定,但大多数应用的设计是非常相似的.这就是为什么许多客户要求使用一些其他应用程序没有的设计,使得应用程序显得独特和不同. 如果功能布局要求非常定制化, ...

  2. windowsXP下搭建JAVA环境教程

    一.工具准备安装JKD6:传送门:http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-w ...

  3. R语言︱常用统计方法包+机器学习包(名称、简介)

    一.一些函数包大汇总 转载于:http://www.dataguru.cn/thread-116761-1-1.html 时间上有点过期,下面的资料供大家参考基本的R包已经实现了传统多元统计的很多功能 ...

  4. JavaWeb中jsp九大内置对象 和四大作用域

    九大内置对象为 page request response session exception config application out pageContext no 内置对象  类型 1 pag ...

  5. Python 爬取 中关村CPU名字和主频

    0.准备工作   1.相关教程         Python 爬虫系列教程:http://cuiqingcai.com/1052.html         Python Web课程:http://ww ...

  6. javascript右键菜单分析

    右键菜单 思路 1.遮蔽原来的默认右键菜单 2.新建右键菜单跟随鼠标移动 3.注意边界处的位置变化 4.自定义右键内容的具体效果 具体 这样的事件涉及到有关contextmenu事件,阻止默认事件,获 ...

  7. 使用Spring-boot小结

    Spring-boot的特点是,通过注入的方式生成FsShell对象,来操作HDFS,其底层封装了HDFS的的shell命令 1. 添加Spring-boot依赖 pom.xml文件 <!--添 ...

  8. 【BZOJ1855】股票交易(动态规划,单调队列)

    [BZOJ1855]股票交易(动态规划,单调队列) 题面 BZOJ 题解 很显然,状态之和天数以及当天剩余的股票数有关 设\(f[i][j]\)表示第\(i\)天进行了交易,剩余股票数为\(j\)的最 ...

  9. Bzoj5093: 图的价值

    题面 Bzoj Sol 一张无向无重边自环的图的边数最多为\(\frac{n(n-1)}{2}\) 考虑每个点的贡献 \[n*2^{\frac{n(n-1)}{2} - (n-1)}\sum_{i=0 ...

  10. 【UVA 11426】gcd之和 (改编)

    题面 \(\sum_{i=1}^{n}\sum_{j=1}^m\gcd(i,j)\mod998244353\) \(n,m<=10^7\) Sol 简单的一道莫比乌斯反演题 \(原式=\sum_ ...