forest--声明式HTTP客户端框架-spring-b oot项目整合

news2024/9/22 5:23:08

 Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL、Header 以及 Body 等信息)绑定到您自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求。

官方链接:

🎁 新手介绍 | Forest

阿丹:

       在之前的技术栈中没有涉及到这里,但是在近期的项目中涉及到了http请求的调用。于是学习和使用了新的技术栈。

导入依赖

<dependency>
    <groupId>com.dtflys.forest</groupId>
    <artifactId>forest-spring-boot-starter</artifactId>
    <version>1.5.33</version>
</dependency>

JOSN框架依赖

注意:如果项目中已经存在了json的框架使用那么不需要导入这个依赖

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.73</version>
</dependency>

XML框架依赖

  <dependency>
      <groupId>com.dtflys.forest</groupId>
      <artifactId>forest-jaxb</artifactId>
      <version>1.5.33</version>
  </dependency>

spring-boot环境下的简单使用

在上面的依赖导入好了以后就可以进行去构建http请求的接口调用了。

在 Forest 中,所有的 HTTP 请求信息都要绑定到某一个接口的方法上,不需要编写具体的代码去发送请求。请求发送方通过调用事先定义好 HTTP 请求信息的接口方法,自动去执行 HTTP 发送请求的过程,其具体发送请求信息就是该方法对应绑定的 HTTP 请求信息

阿丹:

        该说不说!这个方式是什么优雅简单!!!!

快速构建一个GET请求

1、创建一个接口

操作:

       使用@Get注解,并且在这个注解value值中写入url

解读一下:

        在前面的String说明了这个接口要返回一段字符串来

2、使用!!!你没看错就是直接使用!!!

 首先在需要使用的地方使用@Resource直接注入

然后使用的时候直接进行调用即可!!!

3、效果演示!

你别看返回了一个json,但是它其实还是一个字符串,只是使用了测试工具进行了美化。

这个一定要知道!!!

进阶使用!!!!

学习展示一下官方是实例

如何构建请求?

构建请求头

public interface MyClient {

    @Request(
            url = "http://localhost:8080/hello/user",
            headers = "Accept: text/plain"
    )
    String sendRequest(@Query("uname") String username);
}

上面的sendRequest方法绑定的 HTTP 请求,定义了 URL 信息,以及把Accept:text/plain加到了请求头中, 方法的参数String username绑定了注解@Query("uname"),它的作用是将调用者传入入参 username 时,自动将username的值加入到 HTTP 的请求参数uname中。

请求方法

HTTP 请求方法请求注解描述
GET
@Get@GetRequest
获取资源
POST@Post@PostRequest
传输实体文本
PUT@Put@PutRequest
上传资源
HEAD@HeadRequest
获取报文首部
DELETE@Delete@DeleteRequest
删除资源
OPTIONS@Options@OptionsRequest询问支持的方法
TRACE@Trace@TraceRequest追踪路径
PATCH@Patch@PatchRequest
更新资源的某一部分
不定方法
@Request
可动态传入HTTP方法

其中在这个中使用的传递参数的方法是{value}的方式,同时在下面的形参中使用@Var注解的方式来赋值。

若不想在接口定义的时候直接定死为某个具体的 HTTP 请求方法,而是想从全局变量或方法参数中动态传入

可以使用 @Request 请求注解

/**
 * 通过在 @Request 注解的 type 属性中定义字符串模板
 * 在字符串模板中引用方法的参数
 */
@Request(
    url = "http://localhost:8080/hello",
    type = "{type}"
)
String simpleRequest(@Var("type") String type);

在调用改方法时通过参数传入 HTTP 请求方法类型(字符串类型,大小写不敏感)

// POST 请求
String result1 = simpleRequest("post");
// DELETE 请求
String result2 = simpleRequest("DELETE");

更多操作看官网文档很详细

🍭 请求头 | Forest 

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

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

相关文章

实战演练 | Navicat 常用功能之转储与运行 SQL 文件

数据库管理工作中&#xff0c;"转储 SQL 文件"和"运行 SQL 文件"是两个极为常见操作。一般来说&#xff0c;用户使用数据库管理工具或命令行工具来完成。Navicat 管理开发工具中的“转储 SQL 文件”和“运行 SQL 文件”功能具有直观易用的界面、多种文件格…

北斗高精度定位,破解共享单车停车乱象

如今&#xff0c;共享单车已经成为了许多人出行的首选方式&#xff0c;方便了市民们的“最后一公里”&#xff0c;给大家的生活带来了很多便利。然而&#xff0c;乱停乱放的单车也给城市治理带来了难题。在这种情况下&#xff0c;相关企业尝试将北斗导航定位芯片装载到共享单车…

企业如何拓展市场,获取客源并进行降本增效?

对于企业来说&#xff0c;在降低成本和提高效率的同时拓展市场和获取客户是一项复杂的挑战。以下是实现这一目标的一些策略和方法&#xff1a; 1.市场研究和细分&#xff1a;进行彻底的市场研究&#xff0c;以确定您的产品或服务最有前途的细分市场。将您的精力集中在最有利可…

【PickerView案例09-上午内容复习 Objective-C预言】

一、好,我们把前面两个案例:点餐系统、城市选择界面、复习一下,然后继续讲第三个案例:国旗选择界面 1.我们就直接照着这个Demo去说了啊, 先来看一下这个,点餐系统: 首先,我们说,点餐系统,整个界面儿呢,分几部分:三部分 1)顶部呢:一个View 2)中间呢:一个Pic…

EndNote21 | 安装及库的创建

EndNote21 | 安装及库的创建 一、EndNote21安装二、EndNote21库的创建 一、EndNote21安装 软件安装界面&#xff0c;双击“EndNote 21.exe”程序&#xff1b; 图1 安装软件界面点击next&#xff0c;选择30天试用&#xff0c;点击next&#xff1b; 图2 安装过程点击next&…

数据结构——图(图的存储及基本操作)

文章目录 前言一、邻接矩阵法&#xff08;顺序存储&#xff09;1.无向图存储邻接矩阵算法2.有向图存储邻接矩阵算法 二、邻接表法(图的链式存储结构)总结 前言 邻接矩阵法(图的顺序存储结构) 1.1 无向图邻接矩阵算法 1.2 有向图邻接矩阵算法邻接表法(图的一种链式存储结构) 一…

软文推广在企业中运用的优势有哪些?

随着互联网的发展&#xff0c;越来越多的企业在推广方式上已经逐渐脱离于传统媒体&#xff0c;软文推广已经成为了企业宣传的主要方式。也有不少企业来找盒子进行推广&#xff0c;接下来媒介盒子就来告诉大家&#xff0c;企业进行软文推广的优势有哪些&#xff1f; 成本低 传统…

neon常用指令(updating)

函数参考手册&#xff1a; https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/intrinsics 并在左侧选择neon\ Neon 128bit寄存器,所以可支持并行运算 加快运算速度 减少循环 CPU运算比加载数据快&#xff0c;速度瓶颈在加载数据这里。 指令集命名…

为什么你觉得Odoo二次开发难?如何切入?

先说结论&#xff0c;学习Odoo开发&#xff0c;我建议从Odoo的开发者模式切入。事实上在Odoo官网很多问题的解决方案就是基于开发者模式的。 前天有位学了《Odoo开发者模式必知必会》课程的网友跟我说&#xff0c;他之前也花钱买了其他的Odoo开发、前端开发课程&#xff0c;但…

无涯教程-JavaScript - XOR函数

描述 XOR函数返回所有参数的逻辑异或。如果所提供条件的奇数判断为TRUE,则XOR函数返回TRUE,否则返回FALSE。 语法 XOR (logical1, [logical2],…)争论 Argument描述Required/Optionallogical1logical1 is required and subsequent logical values are optional.1 to 254 co…

【1++的C++进阶】之emplace详解

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的C进阶】 在前面C11系列的文章里&#xff0c;我们漏掉了几个知识点&#xff0c;这篇文章对其中一个知识点进行讲解&#xff0c;关于剩余的知识点的文章在后面会相继出炉。 C11中&#xff0c;针…

网络广播模块2*30W 智能4G广播终端开发模块

SV-704UG 4G网络广播模块2*30W 智能4G广播终端开发模块 一、描述 SV-704UG网络音频模块是一款带2*30W功放输出的4G广播音频模块&#xff0c;采用高性能ARM处理器及专业Codec&#xff0c;能接收4G广播音频数据流&#xff0c;转换成音频模拟信号输出。带有一路line in输入&#…

分布式事务解决方案之可靠消息最终一致性

分布式事务解决方案之可靠消息最终一致性 什么是可靠消息最终一致性事务 可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息&#xff0c;事务参与方(消息消费者)一定能 够接收消息并处理事务成功&#xff0c;此方案强调的是只要消息发给事务参与方最终…

java项目线上cpu过高如何排查

1、查看进程 # 查看cpu过高的进程 top -c2、拿着pid查找cpu过高的线程 # 查找 ps H -eo pid,tid,%cpu | grep 19235可以看到19236过高 3、线程转换16进制 printf "%x\n" 192364、查看代码地址 # 19235 进程 # 4b24 线程16进制 # -A20 前20行 jstack 19235 | gr…

回顾2023百度云智大会:人工智能的未来之路

原创 | 文 BFT机器人 在2023年的百度云智大会上&#xff0c;各界的科技专家、学者、企业家和创新者再次齐聚一堂&#xff0c;共同探讨和分享最新的人工智能、大数据、云计算等前沿技术和行业趋势。此次大会以"探索未来科技趋势"为主题&#xff0c;旨在引领行业对未来…

奥威BI系统:时刻跟着需求走,随需分析

面对同一张报表&#xff0c;不同浏览者有不同的需求&#xff0c;那怎么办&#xff1f;有能够时刻跟着浏览者需求走的数据分析报表吗&#xff1f;还真有&#xff0c;奥威BI系统随需分析&#xff0c;随时跟着需求走。 奥威BI系统中的报表就约等于一个平台&#xff0c;可随时展开…

科技资讯|Vision Pro头显无损音频仅限USB-C AirPods Pro 2耳机

彭博社的马克・古尔曼在最新发布的推文中表示&#xff0c;苹果 Vision Pro 头显的无损音频仅限于 USB-C AirPods Pro 2 耳机。 新款采用 USB-C 的 AirPods Pro 2 升级到了 IP54 级别&#xff08;原版不防尘&#xff0c;仅 IPX4 级抗水&#xff09;&#xff0c;可陪伴用户在恶劣…

el-table树形结构 当前行为子级时无高亮效果(已解决)

需求&#xff1a;el-table行点击时需要高亮当前行。 问题&#xff1a;当el-table为树形结构时&#xff0c;点击子级却无高亮效果。 问题描述 如图所示的树形表格&#xff1a; 点击父级有高亮效果&#xff0c;点击子级高亮效果消失。 问题分析 通过查看html源码发现高亮样式…

第一次部署机器学习模型

一、说明 自从我开始机器学习以来&#xff0c;Jupyter Notebooks一直是我最忠实的伙伴。从数据预处理到模型训练、微调和测试&#xff0c;Jupyter Notebooks 在每一步都为我提供支持。然而&#xff0c;我一直都知道&#xff0c;在这些数字页面之外&#xff0c;还有一个完整的世…

软件测试常问面试题

1、讲一下你最熟悉的模块是怎么测试的&#xff1f; 2、fiddler如何抓https请求&#xff1f; 步骤&#xff1a; 设置浏览器http代理 安装证书 导入证书&#xff0c;端口号8888 手机端获取fiddler的地址&#xff0c;配置无线局域网代理&#xff0c;安装手机证书。 3、jmeter如何参…