笔记: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 提出的一个描述互联系统架构风格 ...
随机推荐
- JavaScript预编译原理分析
一直对变量对象,活动对象,预编译,变量提升,执行上下文的时间顺序有着凌乱的认识,但是这些对理解JS语法有着很重要的作用.读了很多人的文章,都没有一个特别清晰的把这些写出来. 今天主要总结一下现阶段自己 ...
- 2.1 存储器域与PCI总线域
HOST主桥的实现因处理器系统而异.PowerPC处理器和x86处理器的HOST主桥除了集成方式不同之外,其实现机制也有较大差异.但是这些HOST主桥所完成的最基本功能依然是分离存储器域与PCI总线域 ...
- CSS3之box-shadow
1.属性简介 box-shadow:颜色值|inset|none|!important 2.浏览器兼容性 (1)IE不兼容,IE9和IE10未知: (2)火狐3.5(包含3.5)以上兼容 (3)Chr ...
- R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:与前面的RsowballC分词不同的 ...
- zTree实现地市县三级级联报错(三)
zTree实现地市县三级级联报错(三) 1.具体报错如下 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] ...
- Linux查看用于终止进程命令
Linux查看用于终止进程命令 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps PID TTY TIME CMD 2576 pts/0 00:00:00 ...
- Django学习-19-缓存
由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5 ...
- 动态规划 POJ3616 Milking Time
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; st ...
- 关于C#委托的一些学习笔记
1.什么是委托就是把方法作为参数传给另一个方法.委托说指向的函数,必须和函数具有相同的签名(返回值和参数类型) Public delegate void DelSayHi(string name); ...
- 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 ...