轻量级声明式的Http库——Feign的独立使用

 更新时间:2021年04月28日 14:21:11   作者:coding途中  
这篇文章主要介绍了轻量级声明式的Http库——Feign的使用教程,帮助大家更好的理解和学习使用feign,感兴趣的朋友可以了解下

前沿

项目中我们经常会使用HTTP工具向外部的REST接口发送请求,大家一般使用Okhttp,或者java的HttpClient发起,今天给大家介绍一款轻量级声明式的Http库(FeignClient),使用起来会使我们的项目代码更整洁,利于维护!

快速开始

Feign是spring cloud中服务消费端的调用框架,通常与ribbon,hystrix等组合使用。 但是在某些项目中,由于遗留原因,整个系统并不是spring cloud项目,甚至不是spring项目,而使用者关注的重点仅仅是简化http调用代码的编写。 如果采用httpclient或者okhttp这样相对较重的框架,对初学者来说编码量与学习曲线都会是一个挑战,而使用spring中RestTemplate,又没有配置化的解决方案,由此想到是否可以脱离spring cloud,独立使用Feign。

引入依赖

      <dependency>
            <groupId>com.netflix.feign</groupId>
            <artifactId>feign-core</artifactId>
            <version>8.18.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.netflix.feign/feign-gson -->
        <dependency>
            <groupId>com.netflix.feign</groupId>
            <artifactId>feign-gson</artifactId>
            <version>8.18.0</version>
        </dependency>

定义接口

public interface OuterService {
    
    @RequestLine("GET /requesr/list?name={name}")
    @Headers("Authorization: Basic  {token}")
    String request(@Param(value = "name") String name,@Param(value = "token") String token);
}

通过@RequestLine指定HTTP请求方式及URL地址,@Param指定参数,可以在url或者header中使用{参数名}去填充请求参数。

配置类

OuterService service = Feign.builder()
            .options(new Options(1000, 3500))
            .retryer(new Retryer.Default(5000, 5000, 3))
            .target(OuterService.class, http://127.0.0.1:8085);

开始调用

service.request("test","ad12hj3bhj1b23hj1b2");

json序列化

在项目中,我们发起的Http请求往往都是json格式,feign同样提供基于json的对象转换工具,方便我们直接以对象形式交互。

接口层面指定header:

@Headers({"Content-Type: application/json","Accept: application/json"})

指定Encoder跟Decoder

## 指定Gson序列化。也可以使用Jackson序列化(引入其依赖)
OuterService service = Feign.builder()
                .encoder(new GsonEncoder())
                .decoder(new GsonDecoder())
                .options(new Options(1000, 3500))
                .retryer(new Retryer.Default(5000, 5000, 3))
                .target(OuterService.class, http://127.0.0.1:8085);

支持我们完成声明式Http接口调用

使用拦截器

在配置代理类时可以自定义拦截器

OuterService service = Feign.builder()
                .encoder(new GsonEncoder())
                .decoder(new GsonDecoder())
                .requestInterceptor(template -> {
                    // template 可以获取/修改body,header等信息
                })
                .options(new Options(1000, 3500))
                .retryer(new Retryer.Default(5000, 5000, 3))
                .target(OuterService.class, http://127.0.0.1:8085);

注解详解

@RequestLine("GET /messages/detail")

指定请求方式跟请求URL

    ## get请求
    @RequestLine("GET /messages/detail?msg_ids={msgIds}")
    ## post请求
    @RequestLine("POST /messages/detail?msg_ids={msgIds}")

@Param("name")

绑定参数别名,可以在RequestLine/body/headers等注解中通过{参数名}去获取值。

@Headers({"Accept:/", "Accept-Language: zh-cn"})

指定请求header

@Body("{name}")

指定请求返回body值为请求参数name

@QueryMap

只能标注在方法参数上。用于传递多个查询值,拼接在URL后面,只能标注在Map类型的参数前面,否则报错。

@HeaderMap

同上,只是用在Header上而已

以上就是轻量级声明式的Http库——Feign的使用的详细内容,更多关于Feign的使用的资料请关注脚本之家其它相关文章!

相关文章

  • Spring Security其它权限校验方式&自定义权限校验方式

    Spring Security其它权限校验方式&自定义权限校验方式

    这篇文章主要介绍了Spring Security其它权限校验方式&自定义权限校验方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 浅谈Java中几个常用集合添加元素的效率

    浅谈Java中几个常用集合添加元素的效率

    下面小编就为大家带来一篇浅谈Java中几个常用集合添加元素的效率。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 在spring中实例化bean无效的问题

    在spring中实例化bean无效的问题

    这篇文章主要介绍了在spring中实例化bean无效的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • SpringBoot 下在 yml 中的 logging 日志配置方法

    SpringBoot 下在 yml 中的 logging 日志配置方法

    logging 配置主要用于控制应用程序的日志输出行为,可以通过配置定制日志的格式、级别、输出位置等,这篇文章主要介绍了SpringBoot 下在 yml 中的 logging 日志配置,需要的朋友可以参考下
    2024-06-06
  • JAVA中取整数的4种方法总结

    JAVA中取整数的4种方法总结

    这篇文章主要给大家介绍了关于JAVA中取整数的4种方法,在java的Math类中,提供了许许多多的和数学计算有关的方法,其中也包括取整的,需要的朋友可以参考下
    2023-07-07
  • 通过实例了解java checked和unchecked异常

    通过实例了解java checked和unchecked异常

    这篇文章主要介绍了通过实例了解checked和unchecked异常,Java异常分为两种类型,checked异常和unchecked异常,另一种叫法是异常和错误。下面小编就带大家来一起学习一下吧
    2019-06-06
  • 基于SpringBoot实现用户身份验证工具

    基于SpringBoot实现用户身份验证工具

    这篇文章主要介绍了基于SpringBoot实现的用户身份验证工具,非常不错,具有参考借鉴价值 ,需要的朋友可以参考下
    2018-04-04
  • IDEA里找不到Maven的有效解决办法(小白超详细)

    IDEA里找不到Maven的有效解决办法(小白超详细)

    这篇文章主要给大家介绍了关于IDEA里找不到Maven的有效解决办法,文中通过图文将解决的办法介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • 解决IDEA 2020.1版本 maven Test命令出现导包错误的问题

    解决IDEA 2020.1版本 maven Test命令出现导包错误的问题

    这篇文章主要介绍了IDEA 2020.1版本 maven Test命令出现导包错误的问题及解决方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 关于实体类中Date属性格式化@JsonFormat @DateTimeFormat

    关于实体类中Date属性格式化@JsonFormat @DateTimeFormat

    这篇文章主要介绍了关于实体类中Date属性格式化@JsonFormat @DateTimeFormat问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论