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

网友投稿 275 2022-10-26


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

前沿

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

快速开始

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

引入依赖

            com.netflix.feign

            feign-core

            8.18.0

        

        

        

            com.netflix.feign

            feign-gson

            8.18.0

        

定义接口

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 servhttp://ice = 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())

 &nbnOJZzsp;              .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的使用的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:文本三剑客
下一篇:H3C防火墙二层设置
相关文章

 发表评论

暂时没有评论,来抢沙发吧~