使用FeignClient发送http/https请求,并动态设置请求头
在项目中,常见的发起http/https请求的方式一般是通过「okhttp3.OkHttpClient」,通过显式的拼接url、添加请求头、指定url就可以创建一个Request,然后通过OkHttpClient发起请求。如下
但是这种方式有问题:
- url需要仔细拼接,防止url出错
- 如果有大量的地方有这种业务需求,会导致重复代码太多,并且由于url的拼接规则都不一样,无法将这些重复代码提取出来,造成了项目臃肿。
- 结构化不清楚
所以可以使用FeignClient,通过定义接口的方式将请求结构化。
- 先定义一个接口。
- 添加FeignClinet注解,其中「url」表示请求的基地址,「name」的值就是Spring容器中声明的bean名字。
- 编写方法。
该接口的意思是发送「get」请求,并且该请求的请求头是由「@RequestHeader」指定的,「@RequestHeader」中的「authorization」是请求头的名字,之后在调用该方法的时候传入的值作为请求头的值。其他的也类似。
「@GetMapping」中的「consumes」指的是发起请求时的「content-type=application/json」,而「produces」是告诉服务器,我需要接受到的数据格式为application/json,即请求头中的「accept=application/json」。
Post请求:
其实FeignClient的使用方法和正常使用Spring MVC类似。当然,方法的返回值也可以是实体类,FeignClient可以自动封装对象。
常见的问题: