李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 每日心情
  • Now
  • 系列文章
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 博友圈
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • 网站地图
    • 网站统计
    • 另一个网站
    • 我的导航站
    • 赞助
  • 🚇开往
!Destiny
惟坚韧者始能遂其志
  1. 首页
  2. 转载
  3. 技术
  4. 正文

SpringBoot使用RestTemplate进行接口调用

2021年1月19日 约 751 字3 分钟 159 1 0
本文最后更新于 2021年1月19日,距今已 2073 天,其中的信息可能已经发生变化,请注意甄别。

引入SpringBoot本来就支持REST服务,因此在SpringBoot项目之间经常需要通过REST的形式来相互调用。本文以具体的实例带大家了解一下SpringBoot中怎么使用RestTemplate进行接口调用。同时,会讲解部分相关源码。

RestTemplate的实例化

RestTemplate实例通常需要自己进行定制,SpringBoot相关的自动配置bean。但是,SpringBoot提供了自动配置的RestTemplateBuilder,可以用它来创建RestTemplate实例。

Boot是如何提供RestTemplateBuilder的呢?我们先来看一下源代码。自动配置的源码位于spring-boot-autoconfigure的RestTemplateAutoConfiguration当中。看一下部分源码:

@Configuration(
    proxyBeanMethods = false
)
@AutoConfigureAfter({HttpMessageConvertersAutoConfiguration.class})
@ConditionalOnClass({RestTemplate.class})
@Conditional({RestTemplateAutoConfiguration.NotReactiveWebApplicationCondition.class})
public class RestTemplateAutoConfiguration {

    @Bean
    @Lazy
    @ConditionalOnMissingBean
    public RestTemplateBuilder restTemplateBuilder(RestTemplateBuilderConfigurer restTemplateBuilderConfigurer) {
        RestTemplateBuilder builder = new RestTemplateBuilder(new RestTemplateCustomizer[0]);
        return restTemplateBuilderConfigurer.configure(builder);
    }

    // 省略其他代码
}

通过上面代码可以看出springboot默认会自动实例化这么一个RestTemplateBuilder,并且bean的名称为restTemplateBuilder。那么,此时我们就可以直接注入来进行使用了。

RestTemplate的实例化配置,有两种方案可选,方案一:

@Configuration
public class RestTemplateConfig {

    @Autowired
    private RestTemplateBuilder restTemplateBuilder;

    @Bean
    public RestTemplate restTemplate() {
        restTemplateBuilder.setConnectTimeout(Duration.ofSeconds(5));
        restTemplateBuilder.setReadTimeout(Duration.ofSeconds(5));
        return restTemplateBuilder.build();
    }
}

此种方案很直观明白,直接注入RestTemplateBuilder,然后在实例化RestTemplate时进行使用即可。

另外一种方案,更简化一些。直接作为restTemplate方法的参数传入,SpringBoot在实例化RestTemplate时会自动匹配注入,使用示例如下:

@Component
public class RestConfig {

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        builder.setConnectTimeout(Duration.ofSeconds(5));
        builder.setReadTimeout(Duration.ofSeconds(5));
        return builder.build();
    }
}

当然,根据你的具体需要可以调用RestTemplateBuilder的其他方法,进行参数项的设置,也就是定制化你的RestTemplate,最后调用build方法进行构建。

通过上面形式,完成了RestTemplate的初始化操作,在其他地方便可以直接使用了。

RestTemplate的使用

这里在一个项目中先定义个Rest的请求,然后通过RestTemplate进行调用该服务。整体实现代码如下:

@RestController
public class TestController {

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/hello")
    public String hello() {
        return "Hello world!";
    }

    @GetMapping("/testHello")
    public void testHello() {
        String url = "http://127.0.0.1:8080/hello";
        ResponseEntity<String> result = restTemplate.getForEntity(url, String.class);
        System.out.println(result.getBody());
    }
}

其中/hello提供被调用的服务,通过/testHello来进行调用。启动项目,访问/testHello,控制台便会打出“Hello world!”,说明调用成功。

当然RestTemplate来提供了各类请求的支持,比如getForObject、execute、exchange、patchForObject等方法,而且这些方法还都有大量的重载方法,可根据具体的需要进行使用。

小结

其实RestTemplate的使用还是比较简单的,配置实例化之后就可以直接使用了。而且又不需要引入其他依赖,只需引入最基本的spring-boot-starter-web即可。赶紧尝试一下吧,也别忘了根据具体的业务场景修改RestTemplate的定制化及对应方法的使用。

除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/transport/2370

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

SpringBoot使用RestTemplate进行接口调用

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: JAVA RestTemplate SpringBoot
最后更新:2021年1月19日

岁月同一天 9 月 23 日

回望过去的今天,你在写什么

  • 代码人生
    1 年前 2025年9月23日
    Consul开启transparent-proxy访问外部资源的时候,请求偶发Connection reset问题分析

    在Consul中启用透明代理(Transparent Proxy)后,访问外部资源出现偶发Connection rese…

  • 其他
    7 年前 2019年9月23日
    Idea激活码

    2020.4.21到期 亲测有效 812LFWMRSH-eyJsaWNlbnNlSWQiOiI4MTJMRldNUlNI…

相关文章
  • SpringBoot常用注解2025年5月28日
  • 从零搭建Spring Cloud Gateway网关(三)——报文结构转换2020年7月13日
  • SpringBoot 中内置的 49 个常用工具类2025年5月26日
  • Java布尔运算2022年7月18日
  • Hibernate、MyBatis的简介、区别以及优化2019年8月20日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

还没有评论,快来抢沙发吧~

花褪残红青杏小,燕子飞时,绿水人家绕。枝上柳绵吹又少,天涯何处无芳草。
墙里秋千墙外道,墙外行人,墙里佳人笑。笑渐不闻声渐悄,多情却被无情恼。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
Redis7+&8.X 全新进阶系列(02):Redis Functions 详解——替代Lua脚本的官方轻量化函数方案 Redis7.x&8.x 全新进阶系列(01):划时代升级总览——从6.x到7.x/8.x全版本变革全景 让WordPress静态化之Rocket‑Nginx WordPress下一代默认主题Ipsum预览 C++之父重磅发声:AI编程正在毁掉一代程序员 支撑全网40%网站的WordPress正在重新拥抱PHP生态
关于主题加载速度优化的一点儿小演进给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能WordPress缓存插件WP Fastest Cache、WP Rocket 、FlyingPress对比关于使用AI的一些思考WordPress下一代默认主题Ipsum预览Kratos+ v1.1.16版本更新说明
【三国轶闻】张飞多次挑衅吕布却安然无事,吕布到底害怕张飞什么? 什么是Helm? MySQL数据库查看执行计划以及名词解释 阿里巴巴的26款超神Java开源项目 代码仓库挂了 为什么MySQL要“小表驱动大表”
最近评论
李锋镝 发布于 22 小时前(09月22日) 是的,换风格了,不过我觉得之前的年份命名挺好的,一看就知道哪一年的
obaby 发布于 1 天前(09月22日) 我现在是个假的wp了,哈哈哈 wp终于改了主题的命名风格了
李锋镝 发布于 3 天前(09月20日) 静态博客我之前也用过,但是感觉不是很方便,后来就一直用的WordPress
Sheep5 发布于 3 天前(09月20日) 我直接用静态博客,天然有速度优势。
不凡 发布于 3 天前(09月20日) 主要是wordpress插件丰富,需要什么功能插件,插件市场应有尽有,typecho是性能更好、更轻...
标签聚合
JVM MySQL 日常 JAVA Spring Theme Redis 架构 Claude 分布式 ElasticSearch 多线程 SpringBoot 数据库 K8s AI编程 IDEA AI WordPress SQL
友情链接
  • 哥斯拉
  • Mr.Sun的博客
  • sssr7844的博客
  • 瓦匠个人小站
  • 韩小韩博客
  • 林羽凡
  • 临窗旋墨
  • 韩情脉脉
  • 懋和道人
  • 知向前端
  • 搬砖日记
  • 若梦博客
  • 彬红茶日记
  • 志文工作室
  • Serendipity
  • 老张博客
  • 蜗牛工作室
  • 九仞之行
  • Honesty
  • lijie blog

COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

lifengdi.com

Domain age badge for lifengdi.com

Theme Kratos-plus By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号