v1.5.30
版本发布时间: 2024-04-10 11:13:41
dromara/forest最新发布版本:v1.5.36(2024-04-10 11:16:50)
v1.5.30
版本发布了,这次版本更新有了较大的改动,支持和适配了 SpringBoot3 和 Solon 框架,将XML模块拆分出了主模块,以及新增了延迟参数特性
适配 SpringBoot3
项目中新增了forest-spring-boot3-starter
模块,集成时需引入如下的依赖
<!-- Forest 的 SpringBoot3 适配模块 -->
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-spring-boot3-starter</artifactId>
<version>1.5.30</version>
</dependency>
<!-- Forest 的 Jakarta XML 支持模块 -->
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-jakarta-xml</artifactId>
<version>1.5.30</version>
</dependency>
如果是老版本 SpringBoot,依赖方式基本不变,但XML的模块需额外引入
<!-- Forest 对 SpringBoot1或2 的适配模块 -->
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-spring-boot-starter</artifactId>
<version>1.5.30</version>
</dependency>
<!-- Forest 的 JAXB 支持模块 -->
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-jaxb</artifactId>
<version>1.5.30</version>
</dependency>
具体做法参考示例项目 https://gitee.com/dromara/forest/tree/master/forest-examples
适配 Solon
项目中新增了forest-solon-plugin
模块,集成时需引入如下的依赖
<!-- Forest 的 Solon 适配模块 -->
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-solon-plugin</artifactId>
<version>1.5.30</version>
</dependency>
<!-- Fastjson、Jackson、Gson 中任选一个JSON框架 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<!-- Forest 的 JAXB 支持模块 -->
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-jaxb</artifactId>
<version>1.5.30</version>
</dependency>
具体做法参考示例项目 https://gitee.com/dromara/forest/tree/master/forest-examples
关于XML模块的说明
本次更新将XML序列化和反序列化相关功能移出了forest-core
主模块,需根据不同的项目情况选择相应的 Forest XML 模块依赖。
如果项目,即普通非 SpringBoot3 项目(Spring、SpringBoot1或2)JDK版本也在17以下的项目,则用forest-jaxb
依赖
<!-- Forest 的 JAXB 支持模块 -->
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-jaxb</artifactId>
<version>1.5.30</version>
</dependency>
如果您的项目是 SpringBoot3,或是 JDK 17及以上版本的项目,这选择forest-jakarta-xml
依赖
<!-- Forest 的 Jakarta XML 支持模块 -->
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-jakarta-xml</artifactId>
<version>1.5.30</version>
</dependency>
延迟参数 (Lambda参数)
有很多情况,Header、Query、Body的参数值不能马上得出,而是在请求发送前的那一刻(所有请求参数都到位时)才能得出,典型的例子就是加签验证的场景(在Header中添加一个参数token,而token的值是对整个body做加密的结果)
- 请求头的延迟参数
Forest.post("/test")
.addHeader("Content-Type", "application/json; charset=UTF-8")
// 这里传入的是一个 Lambda 表达式,它会在请求发送的前一刻才执行
// 将会通过对整个请求的Body做序列化后再进行Base64运算得出一个值,并给到Authorization请求头
.addHeader("Authorization", req -> Base64.encode("Token=" + req.body().encodeToString()))
.addBody("id", "1972664191")
.addBody("name", "XieYu20011008")
.execute();
- 请求体的延迟参数
Forest.post("/test")
.addHeader("Content-Type", "application/json; charset=UTF-8")
.addHeader("_id", "20011008")
.addBody("id", "1972664191")
// 这里传入的是一个 Lambda 表达式,它会在请求发送的前一刻才执行
// 执行过程和原理同上
.addBody("name", req -> "Foo" + req.headerValue("_id"))
.addBody("token", req -> Base64.encode(req.body().encode()))
.execute();
这里在延迟参数Lambda表达式中调用的req.body().encode()
执行的body序列化过程,会自动排除
调用它的延迟参数本身,所以不必担心会发生死循环的情况
新增特性
- feat: 适配 springboot3
- feat: 适配 solon
- feat: 延迟参数 (Lambda参数),支持 Query, Header,Body 三种参数的延迟求值
- feat: 可自定义异步请求池拒绝策略
- feat: 请求体序列化接口,ForestRequest.body().encode() 和 ForestRequest.body().encodeToString()
修复问题
- fix: #I63WWN ForestProxy添加header没有效果
- fix: onBodyEncode 生命周期顺序问题
- fix: 不同 ForestConfiguration 对象共用同一个异步线程池的问题
- fix: 无法解析
localhost:8080
这类省略 http:// 的 url
其他改动
- reflector: 将xml解析模块拆分成了 forest-jaxb 和 forest-jakarta-xml 两个子模块,需要的情况要分别自行引入
- reflector: request body encoder
- refactor: Forest Body clone
- refactor: 构建 Query String 部分
- add: HTTPRoxy 注解的 headers 属性
- add: forest 示例工程
特别鸣谢
特别感谢 Solon 作者 (@noear_admin) 对 Forest 项目在 Solon 适配上的支持