OpenFeign doesn't work with kotlin suspend method
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 38/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 停滞
- 技术栈
- java, kotlin, spring-boot
调研方向
从 SpringMvcContract.parseAndValidateMetadata 和 Feign Contract.BaseContract.parseAndValidateMetadata 开始,以报告的 suspend 接口作为复现用例。跟踪生成的 kotlin.coroutines.Continuation 参数是如何分类的,然后验证 Feign 客户端创建成功,且不会出现 “too many Body parameters” 异常。
由索引模型根据 Issue 内容生成。
描述
I have an API interface where the methods are kotlin suspend methods:
@FeignClient(path = "/api/masker", contextId = "MaskerApi", name = Const.SERVICE, configuration = [FeignConfig::class])
interface MaskerApi {
@PostMapping("/mask")
suspend fun mask(
@Valid @RequestBody maskRequest: MaskRequest,
): RestResponse<List<CharSequence>>
@PostMapping("/matches")
suspend fun matches(
@Valid @RequestBody maskRequest: MaskRequest,
): RestResponse<List<Boolean>>
}
But when I run the program, the program throws an exception:
Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract java.lang.Object io.github.xhstormr.masker.web.api.masker.MaskerApi.matches(io.github.xhstormr.masker.model.masker.MaskRequest,kotlin.coroutines.Continuation)
Warnings:
-
at feign.Util.checkState(Util.java:121) ~[feign-core-11.7.jar:na]
at feign.Contract$BaseContract.parseAndValidateMetadata(Contract.java:142) ~[feign-core-11.7.jar:na]
at org.springframework.cloud.openfeign.support.SpringMvcContract.parseAndValidateMetadata(SpringMvcContract.java:193) ~[spring-cloud-openfeign-core-3.1.0.jar:3.1.0]
at feign.Contract$BaseContract.parseAndValidateMetadata(Contract.java:65) ~[feign-core-11.7.jar:na]
at feign.ReflectiveFeign$ParseHandlersByName.apply(ReflectiveFeign.java:151) ~[feign-core-11.7.jar:na]
at feign.ReflectiveFeign.newInstance(ReflectiveFeign.java:49) ~[feign-core-11.7.jar:na]
at feign.Feign$Builder.target(Feign.java:268) ~[feign-core-11.7.jar:na]
at org.springframework.cloud.openfeign.DefaultTargeter.target(DefaultTargeter.java:30) ~[spring-cloud-openfeign-core-3.1.0.jar:3.1.0]
at org.springframework.cloud.openfeign.FeignClientFactoryBean.loadBalance(FeignClientFactoryBean.java:373) ~[spring-cloud-openfeign-core-3.1.0.jar:3.1.0]
at org.springframework.cloud.openfeign.FeignClientFactoryBean.getTarget(FeignClientFactoryBean.java:421) ~[spring-cloud-openfeign-core-3.1.0.jar:3.1.0]
at org.springframework.cloud.openfeign.FeignClientFactoryBean.getObject(FeignClientFactoryBean.java:396) ~[spring-cloud-openfeign-core-3.1.0.jar:3.1.0]
at org.springframework.cloud.openfeign.FeignClientsRegistrar.lambda$registerFeignClient$0(FeignClientsRegistrar.java:235) ~[spring-cloud-openfeign-core-3.1.0.jar:3.1.0]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1249) ~[spring-beans-5.3.14.jar:5.3.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191) ~[spring-beans-5.3.14.jar:5.3.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.14.jar:5.3.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.14.jar:5.3.14]
... 28 common frames omitted
This kotlin.coroutines.Continuation parameter is generated by the kotlin compiler at compile time, so I can't modify this parameter, how can I tell FeignClient to ignore this Continuation parameter?
- 主要语言
- Java
- 星标
- 1.3k
- 派生
- 834
- 平均合并
- 1 天 15 小时
- 30 天内合并 PR
- 14
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
spring-cloud/spring-cloud-openfeign 的其他 Issue
-
waiting-for-triage
难度 4/5 3-5 天 新手友好度 22/100
spring-cloud/spring-cloud-openfeign#1452 ·
维护者通常 1 天内回复
-
question
难度 4/5 3-5 天 新手友好度 35/100
spring-cloud/spring-cloud-openfeign#1392 · 1 条评论 ·
维护者通常 1 天内回复
-
FeignClientsConfiguration$MicrometerConfiguration.class cannot be opened because it does not exist未关闭feedback-provided
难度 4/5 3-5 天 新手友好度 35/100
spring-cloud/spring-cloud-openfeign#1379 · 5 条评论 ·
维护者通常 1 天内回复
-
waiting-for-triage
难度 3/5 1-2 天 新手友好度 57/100
spring-cloud/spring-cloud-openfeign#1344 · 2 条评论 ·
维护者通常 1 天内回复
-
waiting-for-triage
难度 4/5 3-5 天 新手友好度 45/100
spring-cloud/spring-cloud-openfeign#1343 ·
维护者通常 1 天内回复
查看 spring-cloud/spring-cloud-openfeign 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 3 天内回复
-
A proxy that fails to start logs a RejectedExecutionException stack trace from its shutdown hook未关闭follow-up
难度 2/5 1-3 小时 新手友好度 62/100
Sanne/incus-spawn#1953 ·
维护者通常 1 天内回复
-
Bug
难度 2/5 1-3 小时 新手友好度 70/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 62/100
HexaHexes/ability-battlewills#37 ·
维护者通常 1 天内回复
-
enhancement
难度 2/5 1-3 小时 新手友好度 66/100
Shweit/EtherealPortals#30 ·