Forest是一个高层的、极简的轻量级HTTP调用API框架。
相比于直接使用Httpclient您不再用写一大堆重复的代码了,而是像调用本地方法一样去发送HTTP请求。
- 以Httpclient和OkHttp为后端框架
- 通过调用本地方法的方式去发送Http请求, 实现了业务逻辑与Http协议之间的解耦
- 相比Feign更轻量,不依赖Spring Cloud和任何注册中心
- 支持所有请求方法:GET, HEAD, OPTIONS, TRACE, POST, DELETE, PUT, PATCH
- 支持灵活的模板表达式
- 支持过滤器来过滤传入的数据
- 基于注解、配置化的方式定义Http请求
- 支持Spring和Springboot集成
- JSON字符串到Java对象的自动化解析
- XML文本到Java对象的自动化解析
- JSON、XML或其他类型转换器可以随意扩展和替换
- 支持JSON转换框架: Fastjson, Jackson, Gson
- 支持JAXB形式的XML转换
- 可以通过OnSuccess和OnError接口参数实现请求结果的回调
- 配置简单,一般只需要@Request一个注解就能完成绝大多数请求的定义
- 支持异步请求调用
以下例子基于Spring Boot
直接添加以下maven依赖即可
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>spring-boot-starter-forest</artifactId>
<version>1.3.11</version>
</dependency>
就以高德地图API为栗子吧
package com.yoursite.client;
import com.dtflys.forest.annotation.Request;
import com.dtflys.forest.annotation.DataParam;
public interface AmapClient {
@Request(
url = "http://ditu.amap.com/service/regeo?longitude=${0}&latitude=${1}",
dataType = "json"
)
Map getLocation(String longitude, String latitude);
}
在Spring Boot的配置类或者启动类上加上@ForestScan
注解,并在basePackages
属性里填上远程接口的所在的包名
@SpringBootApplication
@Configuration
@ForestScan(basePackages = "com.yoursite.client")
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
OK,我们可以愉快地调用接口了
// 注入接口实例
@Autowired
private AmapClient amapClient;
...
// 调用接口
Map result = amapClient.getLocation("121.475078", "31.223577");
System.out.println(result);
详细文档请看:dt_flys.gitee.io/forest
亲,进群前记得先star一下哦~
The MIT License (MIT)
Copyright (c) 2016 Jun Gong