详细介绍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. hive:框架理解

    1. 什么是hive  •Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. •本质是将HQL转换为MapReduce程序  2. 为什么 ...

  2. Android中Activity被系统会收前页面信息保存

    1.重写onSaveInstanceState方法 protected void onSaveInstanceState(Bundle outState) { super.onSaveInstance ...

  3. 如何更改Ubuntu的root密码

    安装Ubuntu系统时,只提示了设定用户密码,该密码可用于普通用户暂时获取root的权限,执行一些需要root权限的操作,而没有要求我们设置root密码,在需要用到root密码时,却想不起来,很尴尬啊 ...

  4. Extjs 4.0 Tab页

    1.JSON代码 Ext.MyTabs=Ext.extend(Ext.TabPanel ,{ xtype:"tabpanel", activeTab:2, width:694, h ...

  5. C#数据缓存介绍及Caching通用帮助类整理

    C#缓存主要是为了提高数据的读取速度.因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能. 以下为 ...

  6. TypeError: Error #1034: 强制转换类型失败:无法将 "0.49" 转换为 mx.graphics.IFill。

    1.错误描述 TypeError: Error #1034: 强制转换类型失败:无法将 "0.49" 转换为 mx.graphics.IFill. at mx.charts.ser ...

  7. HTML5结合CSS的三种方法+结合JS的三种方法

    HTML5+CSS: HTML中应用CSS的三种方法 一.内联 内联样式通过style属性直接套进HTML中去. 示例代码 <pstylepstyle="color:red" ...

  8. MFC关于多线程中传递窗口类指针时ASSERT_VALID出错的另类解决 转

    MFC关于多线程中传递窗口类指针时ASSERT_VALID出错的另类解决   在多线程设计中,许多人为了省事,会将对话框类或其它类的指针传给工作线程,而在工作线程中调用该类的成员函数或成员变量等等. ...

  9. 公网访问阿里云数据库MongoDB——填坑日记

    业务情景 两台服务器,一台阿里云ECS云服务器(专用网络),另一台是阿里云数据库MongoDB,处于安全考虑MongoDB是不运行外网连接的,那接下来就看怎么实现公网访问. 看到上面红色的网络类型描述 ...

  10. Unity3D 引擎基础 C# (数据结构入门) Unity3D 界面 UI(NGUI)(动画系统,导航系统)(委托与事件,常用设计模式)

    Geomagic Sculpt 2016.2 Windows Software 11个月前 (01-17) 0评论 Geomagic Sculpt 触觉式三维设计 触碰您的设计使用三维工具做三维设计. ...