详细介绍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. JavaScript预编译原理分析

    一直对变量对象,活动对象,预编译,变量提升,执行上下文的时间顺序有着凌乱的认识,但是这些对理解JS语法有着很重要的作用.读了很多人的文章,都没有一个特别清晰的把这些写出来. 今天主要总结一下现阶段自己 ...

  2. 2.1 存储器域与PCI总线域

    HOST主桥的实现因处理器系统而异.PowerPC处理器和x86处理器的HOST主桥除了集成方式不同之外,其实现机制也有较大差异.但是这些HOST主桥所完成的最基本功能依然是分离存储器域与PCI总线域 ...

  3. CSS3之box-shadow

    1.属性简介 box-shadow:颜色值|inset|none|!important 2.浏览器兼容性 (1)IE不兼容,IE9和IE10未知: (2)火狐3.5(包含3.5)以上兼容 (3)Chr ...

  4. R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:与前面的RsowballC分词不同的 ...

  5. zTree实现地市县三级级联报错(三)

    zTree实现地市县三级级联报错(三) 1.具体报错如下 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] ...

  6. Linux查看用于终止进程命令

    Linux查看用于终止进程命令 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps PID TTY TIME CMD 2576 pts/0 00:00:00 ...

  7. Django学习-19-缓存

    由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5 ...

  8. 动态规划 POJ3616 Milking Time

    #include <iostream> #include <cstdio> #include <algorithm> using namespace std; st ...

  9. 关于C#委托的一些学习笔记

    1.什么是委托就是把方法作为参数传给另一个方法.委托说指向的函数,必须和函数具有相同的签名(返回值和参数类型) Public delegate void DelSayHi(string name); ...

  10. VS2010编译VS2008工程时,LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

    1.问题 电脑上同时安装了VS2008,VS2010,使用VS2010编译VS2008建立的工程,或者,VS2010创建新的工程.编译时,出现以下链接错误: LINK : fatal error LN ...