resttemplate get请求_一步一步学做工具之RestTemplate详解

本文详细介绍了如何在Spring Boot中使用RestTemplate进行GET和POST请求,包括创建RestTemplate、使用getForObject和postForObject方法,以及测试这些请求。文章还提到了getForEntity和postForEntity用于获取HTTP响应的完整信息,并鼓励读者自行探索exchange方法。
摘要由CSDN通过智能技术生成

这是工具开发连载的第二篇,还是做专项知识的铺垫,HTTP在互联网的地位就不用说了,本节咱们用Spring Boot来实现HTTP的请求,接上文,上一节咱们实现了浏览器访问http://localhost:8080/hello,看到页面打印Hello World,(打开springboot的大门【一】),下面咱们就用代码来步步讲解!

1.使用RestTemplate

1.1什么是RestTemplate

传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient,不过此种方法使用起来太过繁琐。

Spring这么强大的框架当然会提供一种简单便捷的模板类来进行操作,这就是RestTemplate。

ebe6331ce564115e3c66ba43300b2fd9.png

RestTemplate方法的名称遵循命名约定,第一部分指出正在调用什么HTTP方法,第二部分指示返回的内容。

本节会介绍restTemplate.getForEntity/postForEntit、getForObject/postForObject方法,get/post指调用了HTTP的get/post方法,Entity指将HTTP响应转换为您选择的对象类型。

还有其他很多类似的方法,有兴趣的同学可以参考官方api。

1.2 创建RestTemplate

创建一个RestTemplate很简单,你只需下面几行代码就搞定了,剩下的交给Spring就好了

首先新建一个package命名为config,即所有配置相关的代码都放在这里;

ps.保持一个好的分类习惯很重要,后期工程越来越大,如果代码文件随意放,维护起来很头大;

为何要放在config下,Spring提供了很多小工具可供使用,RestTemplate就是其中一个,需要将其配置进来;

这里 @Configuration作用在类上就是表示这个类是用来配置工程需要的工具的

@Bean就是具体配置进来的工具,在项目启动时会被自动初始化并加载到容器中可供使用

a0eebf5cf660839c7bca6c1088400290.png

1.3使用RestTemplate

上一步创建RestTemplate后,使用是很方便的,只要 @Autowired 注解引入。

这里@Autowired注解的意思是,当Spring发现@Autowired注解时,将自动在代码上下文中找到和其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方去。

86d03d2932f2218edb47edded1ae18e5.png

2.测试RestTemplate

2.1 SpringBootTest

Spring Test与JUnit等其他测试框架结合起来,提供了便捷高效的测试手段。而SpringBootTest 是在Spring Test之上的再次封装,增加了切片测试,增强了mock能力。简而言之就是SpringBootTest 是很强大的测试工具。

咱们用SpringBootTest来测试的RestTemplate,就请求上一篇创建的Hello World服务

首先再次看一下代码结构,会发现SpringBoot项目中有一个test目录,SpringBoot已经为我们创建了一个测试类

d33b8e7b3f87e78e8160e98f8b38a268.png

@RunWith是Junit4提供的注解,将Spring和Junit链接了起来

@SpringBootTest 作用是Spring将加载所有被管理的bean,基本等同于启动了整个服务,此时便可以开始功能测试

@Test作用在方法上,表明这是一个测试方法

2.2测试编码(getForObject/postForObject)

本着整洁的原则,咱们新建一个测试类,跟需要测试的代码目录对应起来.

在test目录下新建名为configTest 的package,一看就知道他是针对config目录的测试。

在configTest目录下新建RestTemplateConfig对应的测试类RestTemplateConfigTests。

同样的因为这是一个测试类,需要使用SpringBootTest、Junit4,所以引入注解

f7ab5ce5fa1ddb5d1780ed8b06a96a9e.png

 常用的Http请求一般为post/get两种,所以咱们就分别来完善一下,

首先,将RestTemplate引入进来(@Autowired);然后,编写测试方法(@Test)

测试get功能如下图

2659bdc7c437380ad352d1bf508dcb23.png

相应的测试post功能

6af18f5ce2f56545870dd4b222ddb892.png2.3 执行测试

执行测试很简单,直接鼠标右击测试类名,选择 Run ‘RestTemplateConfigTests’

d77d4fefa92985ad6e96bae24354685d.png

查看测试结果,不出意外,会报错如下

仔细研究报错内容‘I/O error on GET request for "http://localhost:8080/hello": Connection refused’

拒绝连接,不是说@SpringBootTest基本上等同于启动了整个服务吗,为啥拒绝连接?

基本等同不代表一样,事实上SpringBoot服务确实启动了,get请求也发出了,只是被拒绝了;

因为Tomcat服务并没有启动,所以没有提供可供访问的web服务

3cc996f518e1d235b69357a0498af6a7.png

所以这里需要先启动工程,AutoSmokeTestingApplication中右击,选择Run ‘AutoSmokeTestingApplication’;

再次同样方法启动测试

结果如下,测试通过:

888d76a8aed0f8329d4cc46229d5a644.png

3.RestTemplate更厉害的

3.1getForEntity/postForEntity

很多场景下http请求想要的不仅仅是返回值,返回的状态码、Cookie等也是需要的.

发送http请求时也需要携带header参数。

这时候就要用到getForEntity/postForEntity

6d7f14c17373658f0d0f6fe217c84711.png

3.2exchange

这个留给大家来探索,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值