MyGit

v1.5.30

dromara/forest

版本发布时间: 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序列化过程,会自动排除调用它的延迟参数本身,所以不必担心会发生死循环的情况

新增特性

修复问题

其他改动

特别鸣谢

特别感谢 Solon 作者 (@noear_admin) 对 Forest 项目在 Solon 适配上的支持

相关地址:原始地址 下载(tar) 下载(zip)

查看:2024-04-10发行的版本