SpringBoot使用轻量级HTTP请求工具Forest

前言:最近在做某些功能的时候需要使用到别的公司的服务,并请求他们提供的接口,已经有很多成熟的HTTP请求框架,比如apache的httpClient包,非常优秀的Okhttp,spring提供的RestTemplate,接口很多的情况下在使用时会发现所有的接口需要写大量的http请求配置信息,申明请求体,返回类型,请求参数,请求头,然后再写业务代码时可读性降低,http请求的代码和业务代码解耦增加,所以找到一款可以方便调用接口的框架——Forest,他只是在原有基础上重复造轮子,实际上是调用接口时干脏活累活的一个实现类, 方便请求和管理大量的HTTP请求信息。

一、官网

http://forest.dtflyx.com/docs/

二、介绍

Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL、Header 以及 Body 等信息)绑定到您自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求。

使用Forest的优点:

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

三、使用

1.安装

截至目前最新版本为1.5.2,只需在项目中导入下面依赖即可

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

2.进行Forest简单配置

forest支持okhttp3和httpclient,默认为okhttp

forest:
  bean-id: config0 # 在spring上下文中bean的id, 默认值为forestConfiguration
  backend: okhttp3 # 后端HTTP API: okhttp3
  max-connections: 1000 # 连接池最大连接数,默认值为500
  max-route-connections: 500 # 每个路由的最大连接数,默认值为500
  timeout: 3000 # 请求超时时间,单位为毫秒, 默认值为3000
  connect-timeout: 3000 # 连接超时时间,单位为毫秒, 默认值为2000
  retry-count: 1 # 请求失败后重试次数,默认为0次不重试
  ssl-protocol: SSLv3 # 单向验证的HTTPS的默认SSL协议,默认为SSLv3
  logEnabled: true # 打开或关闭日志,默认为true
  log-request: true # 打开/关闭Forest请求日志(默认为 true)
  log-response-status: true # 打开/关闭Forest响应状态日志(默认为 true)
  log-response-content: true # 打开/关闭Forest响应内容日志(默认为 false)

 3.接口调用

可以新建一个接口类来专门写第三方的接口调用,类似这样

请求方法支持GET、POST 、PUT 、HEAD OPTIONS、 DELETE

只需要在请求接口类上加上注解,这里以get请求方法为例

可以在接口上加注解@GetRequest("/xx") 或者 @Get("/xx") 或者@Request(type = "GET", url = "/xx")  (这里type里get或GET不区分大小写)这三个注解的效果等同,注解只能在方法上

当请求的所以接口都有相同的属性或者在@Request里重复定义的内容时,可以在接口类上加上注解@BaseRequest,他配置的信息将会分配到每一个接口上,

这里申明的属性值优先级关系为  方法体上面注解@Request > 类申明注解@BaseRequest > application.yml

调用的时候只需要在sping中注入你写 的接口,像调用本地方法一样调用里面的接口方法

 最后:

Forest有很多其他的功能设定,可以类似RPC框架Feign,dubbo这些,只需要我们定义访问的接口,进行调用,而不用关注请求时的细节;同时实现了接口代码和业务代码的解耦,Forest和Feign在使用和配置上确实很相像,但Feign的角色更多是作为Spring Cloud生态里的一个成员。充当RPC通信的角色,其承担的不仅是http通讯,还要对注册中心下发的调用地址进行负载均衡。但是像请求第三方接口使用Forest绝对可以达到事半功倍的效果。

原文地址:https://www.cnblogs.com/LiuFqiang/p/15189546.html