SpringCloud 之OpenFeign使用总结

@FeignClient注解 中属性 contextId使用

@FeignClient注解 中属性 contextId
比如我们有个user服务,但user服务中有很多个接口,我们不想将所有的调用接口都定义在一个类中,比如:

Client 1
@FeignClient(name = "optimization-user")
public interface UserRemoteClient {
	@GetMapping("/user/get")
	public User getUser(@RequestParam("id") int id);
}

Client 2
@FeignClient(name = "optimization-user")
public interface UserRemoteClient2 {
	@GetMapping("/user2/get")
	public User getUser(@RequestParam("id") int id);
}

这种情况下启动就会报错了,因为Bean的名称冲突了,具体错误如下:

Description:
The bean 'optimization-user.FeignClientSpecification', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

解决方案可以增加下面的配置,作用是允许出现beanName一样的BeanDefinition。

spring.main.allow-bean-definition-overriding=true

另一种解决方案就是为每个Client手动指定不同的contextId,这样就不会冲突了。

OpenFeign使用okhttp3作为请求客户端

OpenFeign默认使用JDK提供的 HttpURLConnection
在这里插入图片描述
在这里插入图片描述
使用okhttp3替换HttpURLConnection
新增依赖:

    <dependency>
        <groupId>io.github.openfeign</groupId>
        <artifactId>feign-okhttp</artifactId>
    </dependency>

新增配置:禁用默认的http,启用okhttp

feign.httpclient.enabled=false
feign.okhttp.enabled=true

在这里插入图片描述

RequestParam,RequestBody,SpringQueryMap

@RequestBody:
@RequestBody只能用在Post请求,并且一个Post请求只能有一个@RequestBody。
@RequestBody的参数可以包括复杂类型。

@RequestParam:
一般用在Get请求中,但是@RequestParam 的参数只能是基本类型。

@SpringQueryMap:
如果我们是Get请求,但是请求的参数又很多, 比如我在查询并分页的时候,我们的入参只有一个查询的keyword, 但是又有分页的一些信息pageNum, pageSize, totalSize, 这时候我们一般会把这些数据封装有一个pojo,但是feign的get方式又不支持,这里我们可以使用openfeign提供的@SpringQueryMap来解决这个问题,传递对象参数,让框架自动解析。

@GetMapping(path = "/xxxx /list")
List<XXXXX> getServiceActionsList(@SpringQueryMap XXXXPageParams params);

参考:

OpenFeign 全方位讲解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值