前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一步一步学做工具之RestTemplate详解

一步一步学做工具之RestTemplate详解

作者头像
周辰晨
发布2020-01-20 16:04:52
8330
发布2020-01-20 16:04:52
举报

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

1.使用RestTemplate

1.1什么是RestTemplate

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

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

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就是具体配置进来的工具,在项目启动时会被自动初始化并加载到容器中可供使用

1.3使用RestTemplate

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

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

2.测试RestTemplate

2.1 SpringBootTest

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

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

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

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

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

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

2.2测试编码(getForObject/postForObject)

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

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

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

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

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

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

测试get功能如下图

相应的测试post功能

2.3 执行测试

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

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

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

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

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

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

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

再次同样方法启动测试

结果如下,测试通过:

3.RestTemplate更厉害的

3.1getForEntity/postForEntity

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

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

这时候就要用到getForEntity/postForEntity

3.2exchange

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师影响力 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档