您现在的位置是:首页 > 文章详情

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

日期:2023-08-30点击:104

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

原文链接:https://www.oschina.net/news/256017/forest-1-5-33-released
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章