必须收藏!RestTemplate高级用法,肯定有你需要的

文摘   2024-11-15 19:00   新疆  

最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)。

环境:SpringBoot3.2.5



本文并非旨在阐述RestTemplate的基本使用方法,而是聚焦于揭示其更多实用且高级的应用技巧与策略。

同时你还应该知道,Spring官方不建议再使用RestTemplate,而是基于非阻塞响应式的WebClient,原文如下:

如果你想了解更多的关于WebClient如何使用或他们的对比,你可以查看下面文章

神器来袭!告别RestTemplate,WebClient霸气登场

Spring6提供的四种远程接口调用神器!

1. 简介

Spring RestTemplate 是 Spring 框架 WebMVC 模块的一部分,在 Spring WebFlux 的 WebClient 成为新标准之前,它一直是发起 HTTP 请求的主要入口点。

RestTemplate提供了一个模板风格的 API(例如 JdbcTemplate 或 JmsTemplate),用于发起 HTTP 请求,这使得以结构化的方式处理 RESTful API 变得容易。RestTemplate 使用底层的 HTTP 客户端库,如 JDK HttpURLConnection、Apache HttpComponents 等。

接下来,我将详细介绍RestTemplate中的各种高级应用。

2. 实战案例

2.1 RestTemplate创建

RestTemplate创建方式有2种:

  • 直接构造RestTemplate对象

直接通过构造函数创建RestTemplate时,虽然所有配置项都需要手动完成,这可能会稍显繁琐,但如果你的需求较为简单,仅仅需要进行基础的HTTP调用,那么这种方式依然是一个简洁有效的选择。如下示例:

@Beanpublic RestTemplate restTemplate() {  RestTemplate restTemplate = new RestTemplate() ;  // restTemplate.xxx 进行相关的配置。  return restTemplate ;}

如果你的使用本身就很简单,上面的这种方式再适合不过了。

  • 通过RestTemplateBuilder

通过该Builder对象,使得我们构造ResetTemplate变得非常的简单,各种配置也非常容器,并且该对象是Spring Boot自动配置的,我们可以直接注入。如下示例:

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

这里我们非常方便的设置了超时时间,如果你要使用第一种方式,那么你还得自己构造ClientHttpRequestFactory对象进行超时配置。

2.2 切换请求实现

在默认情况下,RestTemplate底层是通过JDK的 java.net.HttpURLConnection 来执行请求,我们可以通过如下的方式来自定义或者使用其它的实现,如:Apache HttpComponents,okhttp等来实现。

自定义默认的ClientHttpRequestFactory实现

我们可以在默认的实现上设置超时时间,异步执行线程池等,如下示例:

@Beanpublic RestTemplate restTemplate() {  SimpleClientHttpRequestFactory clientHttpRequestFactory =     new SimpleClientHttpRequestFactory() ;  clientHttpRequestFactory.setReadTimeout(5000) ;  clientHttpRequestFactory.setConnectTimeout(5000) ;  // 注意该方法已过时,不建议使用了,如果你要异步请使用WebClient  clientHttpRequestFactory.setTaskExecutor(...) ;  return new RestTemplate(clientHttpRequestFactory)}

注:这底层还是JDK Client实现。

Spring全家桶实战案例源码
spring, springboot, springcloud 案例开发详解
 最新文章