李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 左邻右舍
  • 博友圈
  • 关于我
    • 关于我
    • 另一个网站
    • 我的导航站
    • 网站地图
    • 赞助
  • 留言
  • 走心评论
  • 系列文章
  • Now
  • 每日心情
  • 🚇开往
Destiny
自是人生长恨水长东
  1. 首页
  2. 转载
  3. 技术
  4. 正文

SpringBoot使用RestTemplate进行接口调用

2021年1月19日 约 751 字3 分钟 24点热度 1人点赞 0条评论
本文最后更新于 2021年1月19日,距今已 2028 天,其中的信息可能已经发生变化,请注意甄别。

引入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

推荐阅读

  • SpringBoot定时任务 - 经典定时任务设计:时间轮(Timing Wheel)案例和原理
  • @Resource 和 @Autowired 的区别
  • Spring Boot 2.x使用PostgreSQL数据库
  • SpringBoot中@ImportAutoConfiguration注解与@Import和@EnableAutoConfiguration注解的区别
  • SpringBoot集成Redis,从Redis中获取数据为null,但实际上Redis中是存在对应的数据的,是什么原因导致的呢?
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: JAVA RestTemplate SpringBoot
最后更新:2021年1月19日

岁月同一天 8 月 9 日

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

  • 4 年前 2022年8月9日
    RocketMQ的push消费方式实现详解

    MQ消费方式 消费方式就是指消费者如何从MQ中获取到消息,分为两种方式,push(推方式)和pull(拉方式)。 1、p…

相关文章
  • K8S + docker部署war包项目2020年5月11日
  • 全网最全Shiro认证与授权原理分析2021年2月16日
  • RocketMQ的push消费方式实现详解2022年8月9日
  • 九种常用的UML图总结2019年6月29日
  • @Async注解的坑2022年8月11日

李锋镝

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

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

文章评论

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

文章合为时而著,歌诗合为事而作。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
Kratos+ v1.1.14版本更新说明 Spring Boot 指定外部配置文件的方式 Spring Boot 配置加载优先级总结 Claude Fable 5(claude-fable-5)深度详解 如何通过命令查看Java应用内存中对象数量 关于服务的探活端口和业务端口不一致有什么问题
给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能AI时代,个人技术博客的出路在哪里?增加了两套复古皮肤-牛皮纸、千禧网页这个域名注册整整十年了,十年时间,真快啊WordPress实现用户评论等级排行榜插件WordPress网站换了个字体,差点儿把样式换崩了
使用RocketMQ时,服务启动过程中,Consumer在服务未启动时消费消息问题处理 JVM详细参数说明 Kratos+ —— Kratos 主题二次开发记录 MySQL语句执行顺序 一款开源的社交分享插件——share.js 笑死、腹肌……根本不可能有腹肌的~~
最近评论
老张博客 发布于 16 小时前(08月08日) 做的越来越精美了,好看。
Huo 发布于 1 天前(08月07日) 挺有特色的主题,还是感觉 WP 的确是强大
李锋镝 发布于 2 天前(08月07日) 没理解你想说啥
aboss 发布于 2 天前(08月07日) 你的后台web-login?
李锋镝 发布于 2 天前(08月07日) 这个专门的插件实现的功能更好更全,还能对接支付之类的
标签聚合
数据库 WordPress docker Claude JVM 分布式 日常 ElasticSearch K8s AI SpringBoot 架构 AI编程 Spring MySQL SQL JAVA 多线程 IDEA Redis
友情链接
  • 志文工作室
  • 皮皮社
  • Mr.Sun的博客
  • 风渡言
  • 韩小韩博客
  • 搬砖日记
  • 临窗旋墨
  • 知向前端
  • 哥斯拉
  • Blogs·CN
  • 瓦匠个人小站
  • 旧时繁华
  • 彬红茶日记
  • Honesty
  • 韩情脉脉
  • 林羽凡
  • 老张博客
  • 拾趣博客导航
  • 懋和道人

COPYRIGHT © 2026 lifengdi.com. ALL RIGHTS RESERVED.

正在博友圈履约中

域名年龄

Theme Kratos+ By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号