笔记: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;
- getForEntity
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);
- postForEntity
- 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 详解的更多相关文章
- Spring Cloud Ribbon配置详解
概述 有时候需要自定义Ribbon的配置和客户端超时配置. 自动化配置 /* 使用属性自定义功能区客户端 从版本1.2.0开始,Spring Cloud Netflix现在支持使用属性与Ribbon文 ...
- Spring Cloud限流详解
转自:https://blog.csdn.net/tracy38/article/details/78685707 在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud ...
- Spring Cloud Feign原理详解
目录 1.什么是Feign? 2.Open Feign vs Spring Cloud Feign 2.1.OpenFeign 2.2.Spring Cloud Open Feign 3.Spring ...
- SpringCloud入门之应用程序上下文服务(Spring Cloud Context)详解
构建分布式系统非常复杂且容易出错.Spring Cloud为最常见的分布式系统模式提供了简单易用的编程模型,帮助开发人员构建弹性,可靠和协调的应用程序.Spring Cloud构建于Spring Bo ...
- Spring Boot的前世今生以及它和Spring Cloud的关系详解。
要了解Spring Boot的发展背景,还得从2004年Spring Framework1.0版本发布开始说起,不过大家都是从开始学习Java就使用Spring Framework了,所以就不做过多展 ...
- Spring Cloud Eureka配置文件详解
本篇内容用来说明Eureka 常用配置的含义. 以下配置都是以 eureka.server 开头: 参数 描述 备注 eureka.server.eviction-interval-timer-in- ...
- 笔记:Spring Cloud Ribbon 客户端配置详解
自动化配置 由于 Ribbon 中定义的每一个接口都有多种不同的策略实现,同时这些接口之间又有一定的依赖关系,Spring Cloud Ribbon 中的自动化配置能够很方便的自动化构建接口的具体实现 ...
- 笔记:Spring Cloud Ribbon 客户端负载均衡
Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,基于 Netflix Ribbon 实现,通过Spring Cloud 的封装,可以让我们轻松的将面向服 ...
- Spring RestTemplate详解
Spring RestTemplate详解 1.什么是REST? REST(RepresentationalState Transfer)是Roy Fielding 提出的一个描述互联系统架构风格 ...
随机推荐
- openstack-ocata-镜像服务3
一. 镜像服务概述 镜像服务(glance)使用户能够发现.登记,并检索虚拟机镜像.它提供了一个REST API,使您可以查询虚拟机镜像元数据和检索一个实际的形象.可以存储虚拟机镜像通过镜像服务在不同 ...
- 【mysql】mysql基本操作
mysql基本操作 1.mysql表复制 mysql 表结构的复制 create table t2 like t2 mysql 表数据的复制 insert into t2 select * from ...
- VS2010插件
Highlight all occurrences of selected words
- 改造 vue-cli 脚手架
改造 vue-cli 脚手架 注意,这里使用的 vue-cli 的版本为 2.8.2,不同版本的 vue-cli 可能会有些许不一样. 一.配置多页面 项目开发目录: 需要注意一点,每个页面的文件夹命 ...
- C#图解教程 第十二章 数组
数组 数组 定义重要细节 数组的类型数组是对象一维数组和矩形数组实例化一维数组或矩形数组访问数组元素初始化数组 显式初始化一维数组显式初始化矩形数组快捷语法隐式类型数组综合内容 交错数组 声明交错数组 ...
- 用Mirror,搞定用户画像
Mirror产品概述 Mirror是专为金融行业设计的全面用户画像管理系统.该系统基于星环多年来为多个金融企业客户构建用户画像的经验,深入契合业务需求,实现对用户全方位全维度的刻画.Mirror内置银 ...
- RobotFramework下的http接口自动化Get Response Body关键字的使用
Get Response Body 关键字在上面已经有用到了,服务器端在处理完成了发出的http请求后,会给出对应的响应结果,那么Get Response Body这个关键字就是来获取响应结果中的主体 ...
- Maven 搭建 SSM 项目 (oracle)
简单谈一下maven搭建 ssm 项目 (使用数据库oracle,比 mysql 难,所以这里谈一下) 在创建maven 的web项目时,常常会缺了main/java , main/test 两个文件 ...
- 【洛谷1855】 榨取kkksc03
题面 前面省去一堆背景内容 洛谷的运营组决定,如果一名oier向他的教练推荐洛谷,并能够成功的使用(成功使用的定义是:该团队有20个或以上的成员,上传10道以上的私有题目,布置过一次作业并成功举办过一 ...
- 【HDU1754】I hate it!
题面 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然, ...