Forest v1.5.33 发布,增强了自定义注解组合
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
注解添加host
和port
属性,并覆盖@Address
注解的host
和port
属性,这些以前版本是做不到的,而 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
注解的host
和port
属性从外部传入根地址信息了
@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
注解,并填上host
和port
就能轻松实现 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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
XL-LightHouse 1.0.6 发布,通用流式大数据统计系统
升级内容: 优化重启脚本的执行逻辑; 修复统计原始数据track功能的页面交互问题; 优化项目文档; 一键部署,一行代码接入,无需大数据相关研发运维经验就可以轻松实现海量数据实时统计,使用XL-LightHouse后: 1、再也不需要用Flink、Spark、ClickHouse或者基于Redis这种臃肿笨重的方案跑数了; 2、再也不需要疲于应付对个人价值提升没有多大益处的数据统计需求了,能够帮助您从琐碎反复的数据统计需求中抽身出来,从而专注于对个人提升、对企业发展更有价值的事情; 3、轻松帮您实现任意细粒度的监控指标,是您监控服务运行状况,排查各类业务数据波动、指标异常类问题的好帮手; 4、培养数据思维,辅助您将所从事的工作建立数据指标体系,量化工作产出,做专业严谨的职场人,创造更大的个人价值; 概述 XL-LightHouse是针对互联网领域繁杂的流式数据统计需求而开发的一套集成了数据写入、数据运算、数据存储和数据可视化等一系列功能,支持超大数据量,支持超高并发的【通用型流式大数据统计平台】。 XL-LightHouse目前已基本涵盖了常见的流式数据统计场景,包括count、sum...
- 下一篇
Redisson 3.23.4 发布,官方推荐的 Redis 客户端
Redisson 3.23.4 现已发布,这是一个 Java 编写的 Redis 客户端,具备驻内存数据网格(In-Memory Data Grid)功能,并获得了 Redis 的官方推荐。 此版本更新内容如下: Feature 添加到RPermitExpirableSemaphore对象的多个许可支持的方法 添加了ProtobufCodec编解码器 通过BatchOptions.syncAOF()设置WAITAOF命令 为 RedisNode 对象添加了 bgSave()、scheduleBgSave()、save()、getLastSaveTime()、bgRewriteAOF()、size() 方法 Improvement RSemaphore 和 RLock 操作即使在 readMode = MASTER 和 subscriptionMode = MASTER 的情况下也应具有从属同步功能 Fixed 错误调用 RSearch 的 FieldIndex tag caseSensitive()和separator()设置的顺序 在 Spring Boot 3.1+ 中,Redis...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 2048小游戏-低调大师作品
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器