HTTP框架--FOREST 的使用
引入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 httpClient
和OKhttp
。所以这个开源框架并没有对底层实现进行重复造轮子,而是在易用性上面下足了功夫。
我用Forest
最终完成了和多个服务商api对接的项目,这些风格迥异的API,我仅用了1个小时时间就把他们转化为了本地方法。然后项目顺利上线。
Forest
作为一款更加高层的http框架,其实你并不需要写很多代码,大多数时候,你仅通过一些配置就能完成http的本地化调用。而这个框架所能覆盖的面,却非常之广,满足你绝大多数的http调用请求。
Forest
有以下特点:
- 以
Httpclient
和OkHttp
为后端框架 - 通过调用本地方法的方式去发送Http请求, 实现了业务逻辑与Http协议之间的解耦
- 相比Feign更轻量,不依赖
Spring Cloud
和任何注册中心 - 支持所有请求方法:
GET
,HEAD
,OPTIONS
,TRACE
,POST
,DELETE
,PUT
,PATCH
- 支持灵活的模板表达式
- 支持过滤器来过滤传入的数据
- 基于注解、配置化的方式定义
Http
请求 - 支持
Spring
和Springboot
集成 - 实现
JSON
和XML
的序列化和反序列化 - 支持JSON转换框架:
Fastjson
,Jackson
,Gson
- 支持
JAXB
形式的XML
转换 - 支持
SSL
的单向和双向加密 - 支持http连接池的设定
- 可以通过
OnSuccess
和OnError
接口参数实现请求结果的回调 - 配置简单,一般只需要
@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 的使用相关推荐
- 轻量级HTTP客户端框架—Forest学习笔记
轻量级HTTP客户端框架-Forest学习笔记 一.Forest 1.1 业务需求 一般情况下是后端提供接口,前端调用,解决需求,但是有的时候为了方便,复用别人的接口(网上的,公共的第三方接口(短信. ...
- Forest - 轻量级HTTP客户端API框架,该丢弃HttpClient了
一.前言 最近在码云上扒了一波,发现了一个非常优秀的开源的轻量级HTTP客户端API框架Forest,这款API框架让Java发送HTTP/HTTPS请求不再难,他比原先了OkHttp和HttpCli ...
- Forest一款轻量级HTTP客户端框架
Forest一款轻量级HTTP客户端框架 Forest Forest特性 Forest工作原理 Forest架构 HttpClient Okhttp Forest Forest 是一个开源的 Java ...
- Duang!Duang!Duang!直击痛点的一款 HTTP 客户端框架(Java),墙裂推荐!
大家好,我是二哥呀! 今天来给大家推荐一款直击痛点的 HTTP 客户端框架,可以超高效率地完成和第三方接口的对接. 在介绍本篇的主角之前,我们先来了解下 Java 生态中的 HTTP 组件库,大致可以 ...
- springboot引入forest(调用腾讯地图,逆向解析地址)
forest官网地址:Forest官方网站 - 轻量级HTTP框架 | Forest 1.先引入maven依赖 <dependency><groupId>com.dtflys. ...
- httpclient base64 文件上传_代码级别的上传下载神器
前言 不知道大家在工作中有没有碰到过在代码级别中进行上传和下载呢,一般的场景为调用第三方的接口进行上传大文件和下载大文件. 我一个小伙伴最近在工作中就碰到了,他需要在代码中调用第三方http接口进行原 ...
- IDEA--HTTP Client 工具
目录 走进 Http Client 创建 HTTP request 文件 编辑 HTTP request 文件 HTTP Client 进阶玩法 使用环境变量 定义环境变量 巧用 response h ...
- Forest - 轻量级HTTP客户端框架
Forest - 轻量级HTTP客户端框架 参考:再见,HttpClient!再见,Okhttp! 我觉得对于尤其是做对接第三方api的开发同学来说,这款开源框架能帮你提高很多效率. Forest 底 ...
- [干货]Kaggle热门 | 用一个框架解决所有机器学习难题
新智元推荐 来源:LinkedIn 作者:Abhishek Thakur 译者:弗格森 [新智元导读]本文是数据科学家Abhishek Thakur发表的Kaggle热门文章.作者总结了自己参加100 ...
最新文章
- c# image转换为bitmap_C# 人脸识别库
- MIT一招霸气颠覆传统:勇敢换导师,成本我买单,学生沸腾了
- 一个简单程序的反编译
- 软件商店下载java_Sun升级Java应用商店
- 重磅!PyTorch 中文手册已开源!理论、实践、应用都有了!
- 魔兽世界 服务器维护,魔兽世界8.0:服务器崩溃紧急维护三小时 网易这次得背大锅!...
- Android 插件化原理解析——Hook机制之AMSPMS
- 「第六篇」对于电赛,我们应该看重什么?
- ssl2348-连接格点【图论,最小生成树,并查集】
- 2018 java蓝桥杯校赛题目
- mysql负载均衡分区_分区和负载均衡让MySQL更大更好
- 拳王公社:缺流量难变现?文库引流让你0成本可获5000精准粉!
- 《ASP.NET 本质论》源码下载
- 销售服务器 以次充好 判刑,销售假冒产品怎么判刑处罚,法律怎么规定的?
- 理解伪元素:before和:after
- 英语不好、数学不好能自学编程吗?自学编程出路如何?老程告诉你
- 狂神学习系列04:MySQL+JDBC
- 支付二清与第三方支付
- sharepoint 2010 获取讨论板话题的所有评论回复信息 Get all replies
- 解决div高度不自动增加的问题
热门文章
- jquery for循环_前端基础入门五(掌握jQuery的常用api,实现动态效果)
- php$_GET的作用,PHP-$_GET和$_POST不起作用
- 集合及其常见操作,创建,增加,删除,查找
- poj 3279 poj 1753
- 尼克老湿の面试回顾(7)
- 4、Spring配置中的classpath:与classpath*:的区别
- 鸿蒙专属ota升级真机,鸿蒙OS手机开发者Beta版发布,华为P40、Mate 30系列优先公测...
- 带设计师去选材料_装修可别选“全包”!10个缺陷让你绝望!
- 关闭openssh服务_关于redhat7的openssh漏洞升级修复方法
- utf—8在苹果手机上乱码_Xcode下的中文乱码问题