笔记: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 提出的一个描述互联系统架构风格 ...
随机推荐
- Struts2实现文件上传报错(三)
1.具体错误如下 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -he ...
- freemarker报错之十三
1.错误描述 freemarker.core.ParseException: Token manager error: freemarker.core.TokenMgrError: Unknown d ...
- window.load 和$(document).ready() 区别
1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行. $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕.2.编写个数不同 w ...
- @SuppressWarnings("unchecked")(解决标准的后台HttpServletRequest request, HttpServletResponse response)格式
在springmvc的应用中有些限制会出现必须是 public void save(HttpServletRequest request, HttpServletResponse response) ...
- CodeForces 940E
题意略. 这个题目我开始题意理解得有点问题.本题的实质是在这个数列中选择一些数字,使得选出的这些数字之和最大,用dp来解. 我们先要明确:当我选择数列长度为2 * c时,不如把这个长度为2 * c的劈 ...
- ThreadPoolExecutor线程池参数设置技巧
一.ThreadPoolExecutor的重要参数 corePoolSize:核心线程数 核心线程会一直存活,及时没有任务需要执行 当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线 ...
- hihocoder #1456 : Rikka with Lattice(杜教筛)
hihocoder #1456 : Rikka with Lattice(杜教筛) 题意 : 给你一个\(n*m\)方格图,统计上面有多少个格点三角形,除了三个顶点,不覆盖其他的格点(包括边和内部). ...
- [POI2000]病毒
题面 传送门 Sol 建出AC自动机后DFS能走的点,如果能走回来就可行 # include <bits/stdc++.h> # define IL inline # define RG ...
- BZOJ 1123:城市道路
Sol 就是求割点,把贡献算一下就好...直接tarjan # include <bits/stdc++.h> # define RG register # define IL inlin ...
- 递归方法,查询出树该组织及以下组织的组织ID
-- 查询出该组织下所有组织id的集合 --方法一: public String getAllOrgidsTwo(Integer orgid){ List<Integer> orgids= ...