首页 / 知识
一文吃透接口调用神器RestTemplate
2023-04-11 16:27:00

1、RestTemplate 概述
发送 http 请求,估计很多人用过 httpclient 和 okhttp,确实挺好用的,而 Spring web 中的 RestTemplate 和这俩的功能类似,也是用来发送 http 请求的,不过用法上面比前面的 2 位要容易很多。
spring 框架提供的 RestTemplate 类可用于在应用中调用 rest 服务,它简化了与 http 服务的通信方式,统一了 RESTful 的标准,封装了 http 链接, 我们只需要传入 url 及返回值类型即可。相较于之前常用的 HttpClient,RestTemplate 是一种更优雅的调用 RESTful 服务的方式。
在 Spring 应用程序中访问第三方 REST 服务与使用 Spring RestTemplate 类有关。RestTemplate 类的设计原则与许多其他 Spring 模板类(例如 JdbcTemplate、JmsTemplate)相同,为执行复杂任务提供了一种具有默认行为的简化方法。
RestTemplate 默认依赖 JDK 提供 http 连接的能力(HttpURLConnection),如果有需要的话也可以通过 setRequestFactory 方法替换为例如 Apache HttpComponents、Netty 或 OkHttp 等其它 HTTP library。
考虑到 RestTemplate 类是为调用 REST 服务而设计的,因此它的主要方法与 REST 的基础紧密相连就不足为奇了,后者是 HTTP 协议的方法:HEAD、GET、POST、PUT、DELETE 和 OPTIONS。例如,RestTemplate 类具有 headForHeaders()、getForObject()、postForObject()、put()和 delete()等方法。
下面给大家上案例,案例是重点,通过案例,把我知道的用法都给盘出来。
2、案例代码
2.1、git 地址
https://gitee.com/javacode2018/springmvc-series
2.2、关键代码位置
文中的所有 controller 代码,在RestTemplateTestController类中。
所有@Test 用例的代码,在RestTemplateTest。
2.3、如何运行测试用例?
拉取项目
将 chat16-RestTemplate 模块发布到 tomcat9 中
运行 RestTemplateTest 中对应的用例即可
下面咱们来看 RestTemplate 常见的用法汇总。
3、发送 Get 请求
3.1、普通请求
接口代码
@GetMapping("/test/get")
@ResponseBody
public BookDto get() {
return new BookDto(1, "SpringMVC系列");
}
使用 RestTemplate 调用上面这个接口,通常有 2 种写法,如下
@Test
public void test1() {
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8080/chat16/test/get";
//getForObject方法,获取响应体,将其转换为第二个参数指定的类型
BookDto bookDto = restTemplate.getForObject(url, BookDto.class);
System.out.println(bookDto);
}
@Test
public void test2() {
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8080/chat16/test/get";
//getForEntity方法,返回值为ResponseEntity类型
// ResponseEntity中包含了响应结果中的所有信息,比如头、状态、body
ResponseEntity<BookDto> responseEntity = restTemplate.getForEntity(url, BookDto.class);
//状态码
System.out.println(responseEntity.getStatusCode());
//获取头
System.out.println("头:" + responseEntity.getHeaders());
//获取body
BookDto bookDto = responseEntity.getBody();
System.out.println(bookDto);
}
test1 输出
BookDto{id=1, name='SpringMVC系列'}
test2 输出
200 OK
头:[Content-Type:"application/json;charset=UTF-8", Transfer-Encoding:"chunked", Date:"Sat, 02 Oct 2021 07:05:15 GMT", Keep-Alive:"timeout=20", Connection:"keep-alive"]
BookDto{id=1, name='SpringMVC系列'}
|
最新内容
相关内容
python如何调用另一个文件夹中的内
python如何调用另一个文件夹中的内容?,系统,培训,文件,模块,内容,路径,函数,所在,前缀,语句,python中调用另外一个文件夹中的内容:1、同一文件python中怎么将元组、字典转化为列
python中怎么将元组、字典转化为列表,培训,列表,字典,方法,元素,示例,中将,语法,以上,参数,python中将元组、字典转化为列表的方法:python中可python无法调用cv2怎么解决
python无法调用cv2怎么解决,时报,培训,参数,终端,新版,以上,两个,更多,内容,python调用cv2.findContours时报错:ValueError:notenoughvaluestpython怎么调用方法
python怎么调用方法,系统,培训,方法,参数,法名,定义,列表,实例,以上,函数,python调用的方法类的方法的定义1、定义一个类deffun_name(self,..python如何函数调用
python如何函数调用,函数,画线,较大,合法,培训,定义,变量,语句,单词,语法,函数定义和调用在使用函数之前必须先定义函数,定义函数的语法格式如python调用方法必须实例化么
python调用方法必须实例化么,代码,培训,方法,静态,工厂,参数,程序,对象,实例,定义,python类中的实例方法和静态方法,在调用时,是有区别的。静态python怎么调用class
python怎么调用class,培训,方法,实例,静态,参数,定义,关键字,以上,更多,内容,python类方法和静态方法都可以被类和类实例调用,类实例方法仅可python调用本类方法
python调用本类方法,培训,方法,定义,静态,实例,关键字,以上,更多,内容,python如何调用本类方法要想调用类中的方法,首先要定义一个类,python中python如何调用类方法
python如何调用类方法,培训,方法,实例,静态,参数,定义,关键字,以上,更多,内容,python类方法和静态方法都可以被类和类实例调用,类实例方法仅可pythonpip怎么调用
pythonpip怎么调用,培训,工具,标准,管理,替代品,模块,以上,功能,更多,内容,pip是一个安装和管理Python包的工具,python安装包的工具有easy_inspython函数嵌套时怎么调用
python函数嵌套时怎么调用,培训,函数,周期,变量,嵌套,作用,定义,里面,上层,也就是说,python允许创建嵌套函数。也就是说我们可以在函数里面定python库怎么调用
python库怎么调用,培训,模块,代码,成员,别名,前缀,程序,语句,语法,上面,python使用import导入模块的语法,,主要有以下两种:import模块名1[as别名