告别繁琐配置!Retrofit-Spring-Boot-Starter让HTTP调用更优雅

01 引言

之前分享过一篇文章【像调用接口一样调用第三方API】,今天迎来了新成员Retrofit

retrofit-spring-boot-starter 是一个基于 Spring Boot starter,它简化了 Retrofit Spring 环境中的集成和使用。Retrofit 本身是一个类型安全的 HTTP 客户端库,而该 starter 让其能够无缝融入 Spring Boot 项目,提供自动配置、依赖注入等特性。

GitHub地址:https://github.com/LianjiaTech/retrofit-spring-boot-starter

Gitee地址:https://gitee.com/lianjiatech/retrofit-spring-boot-starter

02 依赖

本文采用的是retrofit-spring-boot-starter 3.2.0SpringBoot的版本影响着依赖的引入。

<dependency><groupId>com.github.lianjiatech</groupId><artifactId>retrofit-spring-boot-starter</artifactId><version>3.2.0</version>
</dependency>

03 最佳实践

3.1 基础配置

接口必须使用@RetrofitClient注解标记!

@RetrofitClient(baseUrl = "http://shanhe.kim/api/")
public interface ShanheRetrofitClient {@GET("za/xingzuo.php")String getXingZuo(@Query("msg") String xinZuo);@GET("za/phonegj.php")String phoneGj(@Query("phone") String phone);@GET("qq/xiongji.php")String qqxiongJi(@Query("qq") String qq);@GET("wz/ymgj.php")String domainGj(@Query("url") String url);
}

这里需要说明的是baseUrl必须以/结尾,否则可能会出现接口404,是因为接口地址被截断了,官方专门做了说明,小编也踩坑了。

3.2 客户端测试

 @Autowired
private ShanheRetrofitClient shanheRetrofitClient;@Test
void retrofitClientTest() {String xingZuo = shanheRetrofitClient.getXingZuo("双鱼");System.out.println("星座:" + xingZuo);System.out.println("--------------------------------");String phoneGj = shanheRetrofitClient.phoneGj("15268595589");System.out.println("手机估值:" + phoneGj);System.out.println("---------------------------------");String qqxiongJi = shanheRetrofitClient.qqxiongJi("585984585");System.out.println("QQ吉凶:" + qqxiongJi);System.out.println("--------------------------------");String domainGj = shanheRetrofitClient.domainGj("baidu.com");System.out.println("域名估值:" + domainGj);
}

测试结果都是OK的。

3.3 注意事项

官方说了:对于绝大部分Spring-Boot项目,引入依赖即可使用。如果引入依赖之后,组件无法正常工作,可尝试如下方案解决。

小编这里没有任何的配置,就值了直接调用成功。

默认情况下,自动使用SpringBoot扫描路径进行RetrofitClient注册,可以在配置类加上@RetrofitScan手动指定扫描路径。

3.4 Http请求相关注解

详细可以参考官方文档:Retrofit官方文档

04 功能扩展

官方提供了很多扩展功能:

这里挑两个小编比较感兴趣的说明一下。

4.1 请求重试

请求重试是接口可用性的的一节指标,可以防止网络抖动等。只需要简单的配置,就可以完成。

# 重试次数
retrofit.global-retry.max-retries=2
# 开启重试:默认fasle
retrofit.global-retry.enable=true
# 重试间隔
retrofit.global-retry.interval-ms=2000
# 重试规则
retrofit.global-retry.retry-rules[0]=response_status_not_2xx

我们将接口路径改成不可访问的,看看结果:

4.2 日志打印

框架可以提供日志的颗粒度打印

# 打印Header日志
retrofit.global-log.log-strategy=headers

日志策略:

我们可以看到打印了Header的日志:

其他的功能大家可以自行试试。

05 小结

retrofit-spring-boot-starter 3.x 提供了现代化、生产就绪的 HTTP 客户端解决方案。通过与 Spring Boot 3.x 的深度集成,它简化了分布式系统间的服务调用,提供了丰富的功能和灵活的配置选项。

赶快去试试吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96535.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

60_基于深度学习的羊群计数统计系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)

目录 项目介绍&#x1f3af; 功能展示&#x1f31f; 一、环境安装&#x1f386; 环境配置说明&#x1f4d8; 安装指南说明&#x1f3a5; 环境安装教学视频 &#x1f31f; 二、数据集介绍&#x1f31f; 三、系统环境&#xff08;框架/依赖库&#xff09;说明&#x1f9f1; 系统环…

代理服务器是什么?怎么选择?

代理服务器是一种位于用户设备与目标网络之间的中间服务器&#xff0c;通过接收用户请求、转发至目标网络并将结果返回给用户&#xff0c;实现“用户→代理服务器→目标网络”的间接访问。其核心功能围绕“网络优化”“访问控制”与“身份隐藏”展开&#xff0c;为个人与企业用…

代码随想录刷题Day56

子集 这道题求子集&#xff0c;集合的基本运算之一&#xff0c;按照高中数学学习集合的知识&#xff0c;可以把这个找幂集的过程按照元素的个数来划分步骤。也就是先找零个元素的子集&#xff0c;再找一个元素的子集&#xff0c;再找两个元素的子集...一直到找N个元素的集合为…

pycharm——关于Pyqt5

PyQt5新手教程&#xff08;七万字&#xff09; import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QPushButton, QLabel, QInputDialog, QColorDialog, QFontDialog, QFileDialog, QProgressDialog, QMessageBox from PyQt5.QtCore i…

P2678 [NOIP 2015 提高组] 跳石头

P2678 [NOIP 2015 提高组] 跳石头 判断条件该怎么写

小麦矩阵系统:一键批量发,多账号同步不掉链

随着互联网的发展和社交平台的普及&#xff0c;企业和个人用户越来越依赖社交媒体平台来进行信息传播、品牌宣传以及市场推广。在这个信息高速流动的时代&#xff0c;如何更高效地管理多个社交平台的账号&#xff0c;并保持信息的同步与流畅传播&#xff0c;成为了许多企业面临…

JavaScript经典面试题二(函数和作用域)

目录 一、闭包&#xff0c;使用场景 1.闭包的定义 2.闭包的实现原理 3.闭包的应用场景 &#xff08;1&#xff09;数据封装与私有变量 &#xff08;2&#xff09;函数柯里化 &#xff08;3&#xff09;事件处理与回调 &#xff08;4&#xff09;模块化开发 4.注意事项 …

Linux防火墙iptables

目录 一&#xff0c;Iptables概述 二&#xff0c;iptables组成 1&#xff0c;表 2&#xff0c;链 3&#xff0c;链表对应关系 4&#xff0c;数据包过滤的匹配流程 5&#xff0c;规则匹配策略 三&#xff0c;iptables防火墙配置 1&#xff0c;iptables命令 2&#xff…

[优选算法专题二——NO.16最小覆盖子串]

题目链接 LeetCode最小覆盖子串 题目描述 代码编写 、关键注意点 仅统计目标相关字符&#xff1a;通过 hash1.count(in) 判断字符是否在 t 中&#xff0c;避免无关字符&#xff08;如 s 中的 D、E&#xff09;干扰统计&#xff0c;提升效率。count 的更新时机&#xff1a;仅当…

考研408计算机网络近年第34题真题解析(2021-2024.34)

&#xff08;2021.34&#xff09;此题已明确为差分曼彻斯特编码&#xff0c;通常第一个时间间隙可能不太好判断&#xff0c;因为0&#xff0c;或1可以变化&#xff0c;但差分曼彻斯特编码的其它位置可以判断&#xff0c;图中黄色数字的时间间隙位置&#xff0c;开始位置和前面一…

微信小程序开发教程(八)

目录&#xff1a;1.全局配置-tabBar2.小程序的页面配置3.数据请求-GET和POST请求4.数据请求-request请求的注意事项1.全局配置-tabBar注意tabar页面必须放到Page头部位置2.小程序的页面配置3.数据请求-GET和POST请求4.数据请求-request请求的注意事项

日语学习-日语知识点小记-构建基础-JLPT-N3阶段(29):文法運用第9回3+(考え方11)

日语学习-日语知识点小记-构建基础-JLPT-N3阶段&#xff08;31&#xff09;&#xff1a;文法運用第9回31、前言&#xff08;1&#xff09;情况说明&#xff08;2&#xff09;工程师的信仰2、知识点1ー 復習&#xff12;ー 单词训练3、单词&#xff08;1&#xff09;日语单词  …

小鹏汽车在 VLA(视觉 - 语言 - 动作)算法模型框架细节与原理

小鹏汽车的 VLA&#xff08;视觉 - 语言 - 动作&#xff09;算法模型框架是其端到端自动驾驶系统的核心&#xff0c;融合了多模态感知、语言推理与动作生成能力。以下是其技术细节与原理的深度解析&#xff1a; 一、整体架构&#xff1a;混合式端到端设计 小鹏 VLA 采用云端基座…

京东商品详情 API 全解析:合规对接与 B2C 场景实战指南

在 B2C 电商运营中&#xff0c;商品详情数据是支撑店铺管理、库存调控、营销决策的核心基础。京东商品详情 API 作为官方合规的数据获取通道&#xff0c;不仅能稳定返回商品标题、价格、库存等关键信息&#xff0c;还针对 B2C 场景新增了预售锁库、次日达标识等特色字段。本文从…

【Visual Studio 2017 和 2019下载】

Visual Studio 2017 和 2019下载VS2017下载地址&#xff1a;VS2019下载地址&#xff1a;VS2017下载地址&#xff1a; Visual Studio 2017 Community 链接 Visual Studio 2017 Enterprise 链接 VS2019下载地址&#xff1a; Visual Studio 2019 Community 链接 Visual Studio …

Python 轻松实现替换或修改 PDF 文字

在日常开发或文档处理过程中&#xff0c;经常会遇到需要对 PDF 文档中的文字进行修改的场景。例如更新合同条款、修正报表数据&#xff0c;或者批量替换文件中的特定内容。由于 PDF 格式以固定排版为特点&#xff0c;直接修改文字不像 Word 那样直观&#xff0c;因此需要借助专…

CI/CD流水线优化实战:从30分钟到5分钟的效能革命

关键词:CI/CD优化、GitHub Actions、Jenkins、自动化部署、流水线加速 一、引言:CI/CD流水线为何需要优化? 在现代软件开发中,CI/CD(持续集成/持续交付)已成为DevOps实践的核心环节。然而,许多团队的流水线存在效率低下问题,​​平均构建时间超过30分钟​​,严重制约…

神经网络矩阵的点乘与叉乘概述

点乘点乘&#xff1a;两个矩阵对应位置元素相乘&#xff08;逐元素级 element - wise&#xff09;实现方式&#xff1a;可通过 * 和 torch.mul(x, y) 函数实现&#xff08;含广播机制&#xff09;模型符号&#xff1a;一个圆圈中间加一个实心点叉乘叉乘&#xff1a;传统线性代数…

PHP学习(第三天)

网站访问流程 一、静态网站访问流程&#xff08;如 index.html&#xff09;1. 流程是怎么样的&#xff1f; 静态网站的页面内容固定&#xff0c;不需要服务器做额外计算&#xff0c;直接把文件返回给浏览器。访问流程大致如下&#xff1a;用户输入网址或点击链接 用户在 个人设…

【办公自动化】如何使用Python脚本自动化处理音频?

在日常办公和内容创作中&#xff0c;音频处理是一项常见需求。无论是处理会议录音、制作播客、编辑音乐背景&#xff0c;还是进行语音识别&#xff0c;Python都能帮助我们高效地完成这些任务。本文将介绍如何使用Python实现音频处理自动化&#xff0c;包括格式转换、音频拼接、…