1.背景
老项目用的spring版本很低,爆出漏洞后,需要修复,于是升级spring版本,升级后项目启动报错java.lang.IllegalArgumentException: Either name or value can be specified, but not both…
2.解决
2.1 上网搜一下
从网上搜了一下,可以把feign注解里的name字段,改成serviceId,确实可以,但我这个老项目有n多feign调用的接口,我要是改,得改到毕业吧。。。
2.2 碰运气
反正就是版本冲突呗,那我就换个版本试试,于是我换了n个spring的版本,又换了n个feign的版本,擦,脸黑。。。
2.3 看代码吧
注意:先确认自己项目里用的到底是哪个版本的feign和spring,说明一下我的是netflix-feign 1.1.2.RELEASE
直接看报错的地方是这行
说明这个attributes的Map里value有值,而改spring版本之前起码是不会有值的,debug了一下改spring版本之后的代码,发现是获取注解上的信息方式变了,会把name的值给到value…
然后,我又换了几个spring版本发现取注解信息貌似都是这样,既然spring没改那肯定feign改了,要不然没法玩了,我把feign的版本升了一下果然好了。
说明:之前改版本号的思路是没问题的,但是pom里引的乱七八糟的,改的跟本没生效,确定是netflix-feign后改spring-cloud-starter-feign这个版本也不管用,再看代码是spring-cloud-netflix-core这个里面的,把这个升级1.2.0.RELEASE。启动成功。