Forest v1.5.33 发布,增强了自定义注解组合


【直播预告】eBPF 到底是可观测领域的神器 or 鸡肋?

Forest介绍

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

获得奖项

  • 2021 年度 OSC 中国开源项目评选「最受欢迎项目」

  • 2022 年度 OSC 中国开源项目评选「最火热中国开源项目社区」

简单的栗子

  • 声明式接口

创建一个 interface,并用@Get注解修饰接口方法。

public interface MyClient {
    @Get("http://localhost:8080/hello")
    String hello();
}

通过@Get注解,将上面的 MyClient 接口中的simpleRequest()方法绑定了一个 HTTP 请求, 其 URL 为http://localhost:8080/hello,并默认使用 GET 方式,且将请求响应的数据以 String 的方式返回给调用者

  • 编程式接口

Forest.get("http://localhost:8080/hello").execute();

编程式接口则更为简单直接

v1.5.33 新增特性

  • 增强自定义注解组合

  • 支持Socks代理

增强自定义注解组合

组合注解是 Forest 提供的自定义注解的一种方式,这种方式只需定义注解自身,已经绑定上需要组合的注解即可,相比通过需要自定义注解声明周期的方式,要方便快捷不少

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
// 组合Header注解
@Headers("Content-Type: application/json")
// 组合Address注解
@Address(host = "127.0.0.1", port = 80)
public @interface MySite {
   // 自定义的 @MySite 注解
}

此时使用自定义的@MySite的注解,就相当于加上了Content-Type: application/json头和host = "127.0.0.1", port = 80的根地址

// @MySite 等价于 
// @Header("Content-Type: application/json") + @Address(host = "127.0.0.1", port = 80)
@MySite
public interface MyClient {
   // ... ...
}

如果你想更灵活一点,想为@@MySite注解添加hostport属性,并覆盖@Address注解的hostport属性,这些以前版本是做不到的,而 v1.5.33 版本可以

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
// 加上 @RequestAttributes 注解才能解析注解中定义的属性
@RequestAttributes
// 组合Header注解
@Headers("Content-Type: application/json")
// 组合Address注解
@Address
public @interface MySite {
    
    // 重写 @Address 注解的 host 属性
    @OverrideAttribute
    String host();
    
    // 重写 @Address 注解的 port 属性
    @OverrideAttribute
    int port();
}

此时就可以通过@MySite注解的hostport属性从外部传入根地址信息了

@MySite(host = "127.0.0.1", port = 80)
public interface MyClient {
   // ... ...
}

Socks协议代理

在以前版本也可以实现 Socks 代理功能,但需要自定义后端的 OkHttpClient 对象或 Apache 的 HttpClient 对象,然后还要后端HTTP框架的 Client 对象绑定自定义的 Socket Connection 部分代码,非常的麻烦。如果再加上 SSL 和用户验证的需求,那更是烦上加烦

而此次 Forest 直接支持了 Socks 协议代理,分别为声明式接口和编程式接口提供了友好的 Api,让事情变成原本就该有的简单

声明式 Socks 代理

只要加上@SocksProxy注解,并填上hostport就能轻松实现 Socks 代理

@Post("http://localhost:8080/hello")
@SocksProxy(host = "127.0.0.1", port = "1089")
String simplePostWithSocksProxy();

加上用户密码验证也十分简单

@Post("http://localhost:8080/hello")
@SocksProxy(host = "127.0.0.1", port = "1089", username = "root", password = "xxxxxx")
String simplePostWithSocksProxy();

编程式 Socks 代理

通过静态方法ForestProxy.socks即可快速构建 Socks 协议代理

ForestProxy proxy = ForestProxy.socks("127.0.0.1"3128);

加上用户密码验证

ForestProxy proxy = ForestProxy.socks("127.0.0.1"3128)
        .username("foo")  // 验证用户名
        .password("bar"); // 验证密码

官网和仓库地址

官网地址:

http://forest.dtflyx.com

Gitee 仓库地址:

https://gitee.com/dromara/forest

Github 仓库地址:

https://github.com/dromara/forest

本次更新内容

  • feat: #I6MLMD 支持socks代理

  • feat: 组合注解支持属性重写

  • fix: #I7UPBR @Body注解的数组参数无法正常解析为JSON数组

  • fix: #I7F3F0 Content-Type为application/xml的情况下,发送byte数组数据错误

  • fix: #I7QLTS @JSONBody Collection codes 报错

  • add: SocksProxy 注解

  • add: OverrideAttribute 注解

  • opt: 优化URL更新方式

  • update: forest-solon-plugin 升级 solon 为:2.4.0


相關推薦

2022-12-01

Forest + IDEA = 双倍快乐! ForestX 隆重登场 Forest 是一款声明式的 Java 开源 HTTP 框架,相比它的前辈 Httpclient 和 OkHttp 更简明易懂、也更容易维护 废话不多说,先让我们康康用它写出来的代码长什么样子 public interface AmapClient { /**

2022-12-25

插件 插件 nacos2-solon-cloud-plugin 增加 namespace 支持 插件 forest-solon-plugin 增加 BindingVar 支持 插件 sqltoy-solon-plugin 清除 @Sql、@Param 注解 插件 solon-test 抽取公共处理,并增加 SolonTest::env 环镜配置 插件 solon.validation 优化 DecimalMax,

2022-08-19

Android Studio Dolphin(版本号为 2021.3.1)首个 RC 已发布。 已达到稳定版状态的新特性 Jetpack Compose Compose 动画组合 Compose 多重预览注解 布局检查器中的 Compose 重新组合计数 Wear OS Wear OS 模拟器配对助手 Wear OS 模拟器侧

2023-03-17

的批量插入insertBatch空指针和占位符   Bee V2.1.x 往期发布: https://www.oschina.net/news/226875/bee-2-1-2-1-released https://www.oschina.net/news/230490/bee-2-1-2-28-released https://www.oschina.net/news/231902/javaorm-bee-2-1-3-6   更多实例,请参考 Bee-exam

2023-04-23

godb=true application.yml 也是支持的.   Bee V2.1.x 往期发布: https://www.oschina.net/news/235501/bee-2-1-4-5-released https://www.oschina.net/news/226875/bee-2-1-2-1-released https://www.oschina.net/news/230490/bee-2-1-2-28-released https://www.oschina.net/news/231902/javao

2023-11-23

Torna 1.24.0 发布,本次发布内容如下: 【新增】 支持查看文档变更记录,精确到字段级别,Markdown、富文本文档支持内容对比 新增前置脚本、后置脚本,可在请求前动态处理参数信息 新增文档状态字段(未开始、进行中

2022-12-14

Torna 1.19.0 发布,本次更新内容如下: 【新增】富文本编辑器支持上传图片,支持上传到本地、阿里云oss、七牛云kodo、s3 【新增】支持纯富文本编辑创建文档 1.19.0 新增富文本创建文档,可以创建项目概览等一些非标准api

2022-09-12

成器,支持设置起始年份:bee.distribution.genid.startYear 优化与增强: 1)增强:GenBean生成Javabean,当id是BigDecimal时,重置为Long型 2)优化GenBean,支持都使用默认配置 3)Ddl: 优化创建表流程 4)多数据源环境下,增加日志提示当前使用的是哪个数据

2023-07-25

LiteFlow介绍 LiteFlow是一个开源编排式规则引擎,能够让你的系统逻辑任意编排,可选用脚本书写逻辑,支持多达6种脚本语言,支持丰富的第三方存储的支持,所有的逻辑和规则均可热变更。设计系统和重构系统的神器。 LiteFlo

2023-09-26

用参数 支持 支持 通知公告 系统通知公告信息发布维护 支持 支持 操作日志 系统正常操作日志记录和查询 系统异常信息日志记录和查询 支持 支持 登录日志 系统登录日志记录查询包含登录异常 支

2023-10-10

的算必须 调整 paramsMap 增加 autoMultipart 处理 调整 nami,forest,feign 负载均衡的获取方式 修复 solon-maven-plugin 在 linux 下因为一些用户角色没有权限导致打包失败问题 优化 VarGather 检查增加自动排序 优化 Props::getMap 处理

2023-09-01

ql 升为 3.25.0-RELEASE dbvisitor 升为 5.4.0 snack3 升为 3.2.79 forest 升为 1.5.33 smarthttp 升为 1.3.0 项目仓库地址? gitee:https://gitee.com/noear/solon github:https://github.com/noear/solon

2023-01-30

行中,进度85%】 基础功能补全【进行中】 数据权限增强【完成】 数据字段权限【完成】 数据变动版本审计记录【90%】 数据翻译功能【进行中】 短信通知对接【待开始】 minio对接【规划中】 省市区基础信息管

2024-05-09

加了 Intel AVX10.1 支持 新的 Intel CPU 支持包括对 Clearwater Forest、Arrow Lake、Lunar Lake 和 Panther Lake 的支持。 AMD Zen 5 支持新增了 -march=znver5 选项。 Intel Xeon Phi CPU 支持已被弃用,并将在 GCC 15 中删除。 AArc64 上的 GCC 现在支持 Micros