spring cloud项目使用feign的时候都会发现一个问题,就是get方式无法解析对象参数。其实feign是支持对象传递的,但是得是Map形式,而且不能为空,与spring在机制上不兼容,因此无法使用。
项目spring cloud 版本:
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
<spring-boot.version>2.0.6.RELEASE</spring-boot.version>
spring cloud在2.1.x版本中提供了@SpringQueryMap注解,可以传递对象参数,框架自动解析,只可惜啊,得是2.1.0以后的版本。spring 在5.0中提供了webflux踢掉了对tomcat的依赖,又提供了gateway踢掉了对zuul的依赖,2.1.x版本恐怕是准备对netflix动刀了
官方源码
// Params.java
public class Params {
private String param1;
private String param2;
// [Getters and setters omitted for brevity]
}
@FeignClient("demo")
public class DemoTemplate {
@GetMapping(path = "/demo")
String demoEndpoint(@SpringQueryMap Params params);
}
springcloud升级版本:
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
<spring-boot.version>2.2.2.RELEASE</spring-boot.version>
升级后问题:Feign报错‘xx.FeignClientSpecification‘, defined in null, could not be registered.
分析:升级版本后不支持bean重名覆盖 即:spring.main.allow-bean-definition-overriding
具体解决方案参考:https://blog.csdn.net/WXF_Sir/article/details/108472761