笔记: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 提出的一个描述互联系统架构风格 ...
随机推荐
- SAS 9.4 的sid问题解决方案汇总(头疼...)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 因为经常出现sid出现问题,所以问题很多.最常 ...
- Android常见漏洞
Android常见漏洞 漏洞名称: Log敏感信息泄露 漏洞描述: 程序运行期间打印了用户的敏感信息,造成泄露 修改建议: 建议禁止隐私信息的log 漏洞名称: web https校验错误忽略漏洞 漏 ...
- Srtuts2实现登录界面(不连接数据库)报错(四)
1.利用Struts2写一个登录界面,出现以下问题 三月 01, 2014 12:26:18 下午 org.apache.struts2.dispatcher.Dispatcher warn 警告: ...
- PCI-E配置MSI中断流程解析
在传统的pci中断体系中,每一个pci总线上的设备被分配一个特定的中断号,然后当设备需要中断cpu时,设备直接发出int信号,然后在cpu的inta引脚拉低的时候将自己的中断号放在数据总线上,一切都要 ...
- Exception in thread "main" java.lang.IllegalArgumentException
1.错误描述 Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given ...
- Linux系统安装软件出错
root@youhaidong-Edge-E545:/home/youhaidong# apt-get install install_flash_player_11_linux.x86_64.tar ...
- 基于数据库的自动化生成工具,自动生成JavaBean、数据库文档、框架代码等(v5.8.8版)
TableGo v5.8.8版震撼发布,此次版本更新如下: 1.新增两个扩展字段,用于生成自定义模板时使用. 2.自定义模板新增模板目录,可以选择不同分类目录下的模 ...
- RobotFramework自动化测试框架的基础关键字(三)
1.1.1 如何定义一个字典 此处我们说的字典,其实就等同于python语言中的字典,和列表一样,字典也是python语言中非常常用的一种数据结构,也类似于Java 语言中的Map. 在 ...
- [BZOJ4372]烁烁的游戏
题面戳我 题意: 给一颗n个节点的树,边权均为1,初始点权均为0,m次操作: Q x:询问x的点权. M x d w:将树上与节点x距离不超过d的节点的点权均加上w. \(1≤n≤10^5\) sol ...
- Git知识总览(六) Git分支中的远程操作实践
前几篇博客陆陆续续的讲了好多关于Git操作的内容,本篇博客仍然也不例外,不过本篇博客的主题是关于git的远程操作的.依照之前博客的风格,我们依然依托于LearningGitBranch中的相关内容来探 ...