Feign调用三宗罪

发表于2020-06-02,长度772, 24个单词, 2分钟读完
Flag Counter

微服务发展这些年,Spring 还是后来居上,通过Spring Cloud又占据了高地。哪怕是在国内,习惯了使用dubbo的人也用spring cloud 更多。而其他的rpc调用框架,feign占据的比重也很大。

但是feign的开发却不总是像http调用的开发那么简单过瘾。或者说,跟http比起来,feign弱爆了。这里简单说一下我截至目前遇到的几个feign的令人纳闷的问题。

url参数必须指定名称

spring mvc 中的url 参数是通过注解@RequestParam传入的。这个注解没有什么必传属性,习惯了spring mvc开发的筒子一般也不会给注解传参。但是在feign中,如果方法签名中的@RequestParam注解没有自定义name属性,项目都启动不了。

这个好让人郁闷啊。我懒得去看feign源码了,不知道为啥要这样。不过哪怕有什么其他原因,也不应该提供一种这么不好的用户体验。

get请求不能传入请求体

这个现象更让人郁闷。在get请求中不能传入@RequestBody标注的参数,这是为啥呢?一个查询参数多一点的分页查询就不得不使用post请求。

feign要求get请求的action必须每个参数都用@RequestParam标注,不然请求的时候就报错(没错,延迟到了请求的时候,编译和启动没问题)。但是如果通过feign调用elasticsearch的api,却可以通过get传body。

feign,你为啥要这样?

请求体不能传null

这个问题又是和传统spring mvc不协调的地方。一个参数,无论是url参数还是请求体,在注解中都可以通过required=false表明可以不传入。但是在feign调用中,@RequestBody标注的参数不管你写不写false,都不能不传,否则报错。

feign你脑子是怎么瓦特的?

Written on June 2, 2020
分类: dev, 标签: java
如果你喜欢,请赞赏! davelet