引入jar包

<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>spring-boot-starter-forest</artifactId>
<version>1.3.0</version>
</dependency>

定义自己的接口类

public interface MyClient {@Request(url = "http://baidu.com")String simpleRequest();@Request(url = "http://ditu.amap.com/service/regeo",dataType = "json")Map getLocation(@DataParam("longitude") String longitude, @DataParam("latitude") String latitude);}

在启动类里配置代理接口类的扫描包

@SpringBootApplication
@ForestScan(basePackages = "com.example.demo.forest")
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

这时候,你就可以从spring容器中注入你的代理接口,像调用本地方法一样去调用http的api了

@Autowired
private MyClient myClient;@Override
public void yourMethod throws Exception {Map result = myClient.getLocation("124.730329","31.463683");System.out.println(JSON.toJSONString(result,true));
}

日志打印,Forest打印了内部所用的http框架,和实际请求url和返回。当然日志可以通过配置去控制开关。

Forest 底层封装了2种不同的http框架:Apache httpClientOKhttp。所以这个开源框架并没有对底层实现进行重复造轮子,而是在易用性上面下足了功夫。

我用Forest最终完成了和多个服务商api对接的项目,这些风格迥异的API,我仅用了1个小时时间就把他们转化为了本地方法。然后项目顺利上线。

Forest作为一款更加高层的http框架,其实你并不需要写很多代码,大多数时候,你仅通过一些配置就能完成http的本地化调用。而这个框架所能覆盖的面,却非常之广,满足你绝大多数的http调用请求。

Forest有以下特点:

  • HttpclientOkHttp为后端框架
  • 通过调用本地方法的方式去发送Http请求, 实现了业务逻辑与Http协议之间的解耦
  • 相比Feign更轻量,不依赖Spring Cloud和任何注册中心
  • 支持所有请求方法:GETHEADOPTIONSTRACEPOSTDELETEPUTPATCH
  • 支持灵活的模板表达式
  • 支持过滤器来过滤传入的数据
  • 基于注解、配置化的方式定义Http请求
  • 支持SpringSpringboot集成
  • 实现JSONXML的序列化和反序列化
  • 支持JSON转换框架: Fastjson,JacksonGson
  • 支持JAXB形式的XML转换
  • 支持SSL的单向和双向加密
  • 支持http连接池的设定
  • 可以通过OnSuccessOnError接口参数实现请求结果的回调
  • 配置简单,一般只需要@Request一个注解就能完成绝大多数请求的定义
  • 支持异步请求调用

详细文档: https://dt_flys.gitee.io/forest

4.1 模板表达式和参数的映射绑定功能

模板表达式在使用的时候特别方便,举个栗子

@Request(url = "${0}/send?un=${1}&pw=${2}&ph=${3}&ct=${4}",type = "get",dataType = "json"
)
public Map send(String base,String userName,String password,String phone,String content
);

上述是用序号下标进行取值,也可以通过名字进行取值:

@Request(url = "${base}/send?un=${un}&pw=${pw}&ph=${3}&ct=${ct}",type = "get",dataType = "json"
)
public Map send(@DataVariable("base") String base,@DataVariable("un") String userName,@DataVariable("pw") String password,@DataVariable("ph") String phone,@DataVariable("ct") String content
);

甚至于可以这样简化写:

@Request(url = "${base}/send",type = "get",dataType = "json"
)
public Map send(@DataVariable("base") String base,@DataParam("un") String userName,@DataParam("pw") String password,@DataParam("ph") String phone,@DataParam("ct") String content
);

以上三种写法是等价的

当然你也可以把参数绑定到header和body里去,你甚至于可以用一些表达式简单的把对象序列化成json或者xml:

@Request(url = "${base}/pay",contentType = "application/json",type = "post",dataType = "json",headers = {"Authorization: ${1}"},data = "${json($0)}"
)
public PayResponse pay(PayRequest request, String auth);

当然数据绑定这块详情请参阅文档

4.2 对HTTPS的支持

以前用其他http框架处理https的时候,总觉得特别麻烦,尤其是双向证书。每次碰到问题也只能去baidu。然后根据别人的经验来修改自己的代码。

Forest对于这方面也想的很周到,底层完美封装了对https单双向证书的支持。也是只要通过简单的配置就能迅速完成。举个双向证书栗子:

@Request(url = "${base}/pay",contentType = "application/json",type = "post",dataType = "json",keyStore = "pay-keystore",data = "${json($0)}"
)
public PayResponse pay(PayRequest request);

其中pay-keystore对应着application.yml里的ssl-key-stores

forest:...ssl-key-stores:- id: pay-keystorefile: test.keystorekeystore-pass: 123456cert-pass: 123456protocols: SSLv3

这样设置,就ok了,剩下的,就是本地代码形式的调用了。

HTTP框架--FOREST 的使用相关推荐

  1. 轻量级HTTP客户端框架—Forest学习笔记

    轻量级HTTP客户端框架-Forest学习笔记 一.Forest 1.1 业务需求 一般情况下是后端提供接口,前端调用,解决需求,但是有的时候为了方便,复用别人的接口(网上的,公共的第三方接口(短信. ...

  2. Forest - 轻量级HTTP客户端API框架,该丢弃HttpClient了

    一.前言 最近在码云上扒了一波,发现了一个非常优秀的开源的轻量级HTTP客户端API框架Forest,这款API框架让Java发送HTTP/HTTPS请求不再难,他比原先了OkHttp和HttpCli ...

  3. Forest一款轻量级HTTP客户端框架

    Forest一款轻量级HTTP客户端框架 Forest Forest特性 Forest工作原理 Forest架构 HttpClient Okhttp Forest Forest 是一个开源的 Java ...

  4. Duang!Duang!Duang!直击痛点的一款 HTTP 客户端框架(Java),墙裂推荐!

    大家好,我是二哥呀! 今天来给大家推荐一款直击痛点的 HTTP 客户端框架,可以超高效率地完成和第三方接口的对接. 在介绍本篇的主角之前,我们先来了解下 Java 生态中的 HTTP 组件库,大致可以 ...

  5. springboot引入forest(调用腾讯地图,逆向解析地址)

    forest官网地址:Forest官方网站 - 轻量级HTTP框架 | Forest 1.先引入maven依赖 <dependency><groupId>com.dtflys. ...

  6. httpclient base64 文件上传_代码级别的上传下载神器

    前言 不知道大家在工作中有没有碰到过在代码级别中进行上传和下载呢,一般的场景为调用第三方的接口进行上传大文件和下载大文件. 我一个小伙伴最近在工作中就碰到了,他需要在代码中调用第三方http接口进行原 ...

  7. IDEA--HTTP Client 工具

    目录 走进 Http Client 创建 HTTP request 文件 编辑 HTTP request 文件 HTTP Client 进阶玩法 使用环境变量 定义环境变量 巧用 response h ...

  8. Forest - 轻量级HTTP客户端框架

    Forest - 轻量级HTTP客户端框架 参考:再见,HttpClient!再见,Okhttp! 我觉得对于尤其是做对接第三方api的开发同学来说,这款开源框架能帮你提高很多效率. Forest 底 ...

  9. [干货]Kaggle热门 | 用一个框架解决所有机器学习难题

    新智元推荐 来源:LinkedIn 作者:Abhishek Thakur 译者:弗格森 [新智元导读]本文是数据科学家Abhishek Thakur发表的Kaggle热门文章.作者总结了自己参加100 ...

最新文章

  1. c# image转换为bitmap_C# 人脸识别库
  2. MIT一招霸气颠覆传统:勇敢换导师,成本我买单,学生沸腾了
  3. 一个简单程序的反编译
  4. 软件商店下载java_Sun升级Java应用商店
  5. 重磅!PyTorch 中文手册已开源!理论、实践、应用都有了!
  6. 魔兽世界 服务器维护,魔兽世界8.0:服务器崩溃紧急维护三小时 网易这次得背大锅!...
  7. Android 插件化原理解析——Hook机制之AMSPMS
  8. 「第六篇」对于电赛,我们应该看重什么?
  9. ssl2348-连接格点【图论,最小生成树,并查集】
  10. 2018 java蓝桥杯校赛题目
  11. mysql负载均衡分区_分区和负载均衡让MySQL更大更好
  12. 拳王公社:缺流量难变现?文库引流让你0成本可获5000精准粉!
  13. 《ASP.NET 本质论》源码下载
  14. 销售服务器 以次充好 判刑,销售假冒产品怎么判刑处罚,法律怎么规定的?
  15. 理解伪元素:before和:after
  16. 英语不好、数学不好能自学编程吗?自学编程出路如何?老程告诉你
  17. 狂神学习系列04:MySQL+JDBC
  18. 支付二清与第三方支付
  19. sharepoint 2010 获取讨论板话题的所有评论回复信息 Get all replies
  20. 解决div高度不自动增加的问题

热门文章

  1. jquery for循环_前端基础入门五(掌握jQuery的常用api,实现动态效果)
  2. php$_GET的作用,PHP-$_GET和$_POST不起作用
  3. 集合及其常见操作,创建,增加,删除,查找
  4. poj 3279 poj 1753
  5. 尼克老湿の面试回顾(7)
  6. 4、Spring配置中的classpath:与classpath*:的区别
  7. 鸿蒙专属ota升级真机,鸿蒙OS手机开发者Beta版发布,华为P40、Mate 30系列优先公测...
  8. 带设计师去选材料_装修可别选“全包”!10个缺陷让你绝望!
  9. 关闭openssh服务_关于redhat7的openssh漏洞升级修复方法
  10. utf—8在苹果手机上乱码_Xcode下的中文乱码问题