Retrofit配置多个@Path参数调用接口报错如何解决
报错根因
这个问题和你写的@Path路径参数完全没关系,错的是接口方法的返回值配置:
Retrofit默认是没有能力直接把自定义实体类作为接口返回值的,没有添加额外CallAdapter的前提下,接口方法必须返回Call<T>类型,不然就会抛出你遇到的「无法为方法创建对应CallAdapter」的报错。
如果你是想用Kotlin协程简化异步逻辑,只要没给方法加suspend修饰,Retrofit也会按照普通同步方法处理,一样会触发这个报错。
修复方法
你现在的baseUrl、@Path参数拼接逻辑都是对的,不用改,只需要根据你的技术栈调整接口返回值即可:
- 如果你用传统的Call方式发请求:
把返回值改成用Call包裹实体类,完整写法:
后续通过这个Call对象发起异步/同步请求就行。@GET("{language_code}/{word}") fun getDictionnaryWord( @Path("language_code") language : String, @Path("word") word : String, ) : Call<DictionnaryModelItem> - 如果你用Kotlin协程发请求(当前Android开发的常规写法):
先确认你的Retrofit版本≥2.6.0(这个版本之后Retrofit原生支持suspend函数,不需要额外加协程适配器),给方法加上suspend修饰就能保留直接返回实体类的写法:
要是你用的Retrofit版本低于2.6.0,就在Retrofit构建链里补上协程的CallAdapter工厂:@GET("{language_code}/{word}") suspend fun getDictionnaryWord( @Path("language_code") language : String, @Path("word") word : String, ) : DictionnaryModelItem
注:旧版协程适配器已经过时,优先升级Retrofit版本比手动加适配更稳妥。return Retrofit.Builder() .baseUrl("https://api.site.dev/api/v2/entries/") .addConverterFactory(GsonConverterFactory.create()) // 追加这一行 .addCallAdapterFactory(CoroutineCallAdapterFactory()) .client(okHttp) .build() .create(ApiInterface::class.java)
内容的提问来源于stack exchange,提问作者Taki
相关产品推荐
相关产品推荐

