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

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,但是它其实还是一个字符串,只是使用了测试工具进行了美化。

这个一定要知道!!!

进阶使用!!!!

学习展示一下官方是实例

如何构建请求?

构建请求头

java 复制代码
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 请求注解

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

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

java 复制代码
// POST 请求
String result1 = simpleRequest("post");
// DELETE 请求
String result2 = simpleRequest("DELETE");

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

🍭 请求头 | Forest

相关推荐
阿维的博客日记4 分钟前
HTTP/3.0的连接迁移使用连接ID来标识连接为什么可以做到连接不会中断
网络·网络协议·http
半路_出家ren8 分钟前
第8章:应用层协议HTTP、SDN软件定义网络、组播技术、QoS
网络·网络协议·http·mpls·qos·sdn软件定义网络·组播技术
teeeeeeemo29 分钟前
http和https的区别
开发语言·网络·笔记·网络协议·http·https
Bruce_Liuxiaowei1 小时前
Netstat高级分析工具:Windows与Linux双系统兼容的精准筛查利器
linux·运维·网络·windows·安全
iFulling1 小时前
【计算机网络】第三章:数据链路层(下)
网络·笔记·计算机网络
Brookty2 小时前
【操作系统】进程(二)内存管理、通信
java·linux·服务器·网络·学习·java-ee·操作系统
易德研发2 小时前
ubuntu24.04安装NFS网络文件系统/ARM开发板NFS挂载
运维·服务器·网络
冬天给予的预感4 小时前
DAY 54 Inception网络及其思考
网络·python·深度学习
kfepiza12 小时前
Debian的`/etc/network/interfaces`的`allow-hotplug`和`auto`对比讲解 笔记250704
linux·服务器·网络·笔记·debian
无妄-202412 小时前
软件架构升级中的“隐形地雷”:版本选型与依赖链风险
java·服务器·网络·经验分享