• 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绝对可以达到事半功倍的效果。

  • 相关阅读:
    AngularJS--学习笔记(一)
    一行代码写出随机数
    2015最新--浏览器分布图
    JQ系列:css操作
    Eclipse启动Tomcat,45S超时问题解决
    深入理解浏览器兼容性模式
    常见浏览器兼容性问题与解决方案
    面向对象设计模式之一观察者模式
    自定义样式RatingBar的使用
    Python之Matplot——01.堆叠柱状图的绘制
  • 原文地址:https://www.cnblogs.com/LiuFqiang/p/15189546.html
Copyright © 2020-2023  润新知