详细介绍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的Live架构

    MVC.MVP.MVVM的选择 一开始我们在这几种框架上的选择上就没花太多的心思,因为他们都只是为了实现清晰的分层逻辑,差异化的地方无非是讲UI逻辑.交互逻辑.数据绑定逻辑.业务逻辑堆放在那一层的问题 ...

  2. 在U-boot中添加以太网驱动

    当定义CONFIG_CMD_NET和CONFIG_CMD_PING,编译之后执行ping命令,告警没有找到以太网. 因此,需要打开U-boot的网络功能, u-boot-sunxi-sunxi中没有找 ...

  3. Srtuts2实现登录界面(不连接数据库)报错(二)

    二月 28, 2014 11:37:29 下午 org.apache.catalina.core.AprLifecycleListener init 严重: An incompatible versi ...

  4. Java Web项目(Extjs)报错二

    1.Java Web项目(Extjs)报错二 具体报错如下: usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ...

  5. freemarker基本数据类型

    freemarker基本数据类型 1.基本数据类型 (1)字符串 (2)数字 (3)布尔值 (4)日期 2.展示示例 <html> <head> <meta http-e ...

  6. javax.servlet.JspTagException:Illegal use of &lt;when&gt;-style tag without &lt;choose &gt;as its di

    1.错误描述 javax.servlet.JspTagException:Illegal use of <when>-style tag without <choose >as ...

  7. 对spring web启动时IOC源码研究(二)

    发现这样debug到哪说到哪好像有点回不来了~让我重新理下思路,主要步骤先上图,有什么不同意见欢迎批评教育~ (一)spring IOC的主要步骤都在refresh()这个方法中,我给出了自己的理解注 ...

  8. eclipse -解决Unhandled event loop exception GC overhead limit exceeded

    今天第一次遇到这个问题, 拿出来和大家分享一下. 首先说明下我发现这个错误的过程,  看下面的三张图片 1,在本地weblogic发布项目的时候 2 , 等待一段时间, 出现以下错误 3 ,  点击上 ...

  9. 使用ASP.NET广告控件的XML语言创建广告链接--ASP.NET

    1.AdRotator广告控件的所有属性都是可选的,XML文件中可以包含如下表所示的属性(XML文件的广告属性).   属性 说明 ImageUrl 要显示的图像的URL  NavigateUrl 单 ...

  10. myeclipse 打开jsp文件出错

    第一步:找到MyEclipse的安装路径:第二步:删除掉MyEclipse\configuration下名为:org.eclipse.update的文件夹:第三步:产出之后重启myeclipse,在打 ...