笔记: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 提出的一个描述互联系统架构风格 ...
随机推荐
- H3C交换机的端口隔离
H3C端口隔离 1.同一个VLAN下隔离物理端口 2.在隔离组中的端口不能相互访问 3.隔离组内的端口,可以与同一VLAN下的其他端口通信 配置: [H3C]port-isolate group 1 ...
- strcpy、strncpy与memcpy的区别与使用方法
strcpy.strncpy.memcpy这三个C语言函数我们在主机代码编写中会很频繁的使用到,但是三个函数的区别.使用时该注意什么还是有必要说下的. 本文参考<C 标准库>编写. 一.函 ...
- PL/SQL集合 ----- varrays
varrays可以再表,记录,对象定义中使用,类似于C中的数组. 1.定义varrays用作PL/SQL程序构造块. declare type integer_varray ) of integer; ...
- HTML5可以省略结束标记的元素
HTML5可以省略结束标记的元素 1.dd 2.dt 3.li 4.p 5.optgroup 6.option 7.rt 8.rp 9.thread 10.tfoot 11.tr 12.td 13.t ...
- JustMock .NET单元测试利器(三)用JustMock测试你的应用程序
用JustMock测试你的应用程序 本主题将指导您通过几个简单的步骤来使用Telerik®JustMock轻松测试您的应用程序.您将理解一个简单的原理,称为Arrange / Act / Assert ...
- IOS开发之App被拒原因
新手入门,简单记录一下Ipa提交给苹果公司后,有可能会被驳回的原因,欢迎补充和纠正! 原因: 1.ipa功能缺陷,譬如不能正常登陆.界面打不开.支付调不起等测试过程中未发现的Bug,实在是不应该!!! ...
- numpy使用总结
numpy是Python中常用的数据处理库的基础库,一般通过import numpy as np的方式导进 科学计算库numpy 在numpy中,主要的数据结构是ndarray,在numpy中称为数组 ...
- [BZOJ4872][六省联考2017]分手是祝愿
BZOJ Luogu sol 首先发现肯定有解,又因为每个位置至多操作一次,所以最优解一定是在\([0,n]\)之间 有一种可以在\(O(\sum_{i=1}^{n}\lfloor\frac{n}{i ...
- 接收JSON类型转成对象
写个小例子吧: public String getJsonTest(String jsonString){} 参数是json 参数长这样 ===> { 'puser' : {'id' : ' ...
- SQL基础教程读书笔记-3
5 复杂查询 5.1 视图 1.表和视图的区别表:保存的是实际的数据视图:保存的是SELECT语句.从视图读取数据时,视图会在内部执行该SELECT语句并创建出一张临时表. 2.视图的优点① 无需保存 ...