Retrofit2标量转换器在gson转换器android之前不转换
Posted
技术标签:
【中文标题】Retrofit2标量转换器在gson转换器android之前不转换【英文标题】:Retrofit2 scalar converter not converting before gson converter android 【发布时间】:2017-01-07 20:11:10 【问题描述】:我在 android 中有以下改造 2,首先是标量转换器工厂,然后是 gson 转换器,但是当我调用字符串调用并且响应以字符串形式出现时,它给了我例外“不是 JSON 对象:”成功“。
我错过了什么吗?
改造创作:
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(IPService.END)
.client(new OkHttpClient.Builder().build())
.build();
调用创建:
@POST("/friends/sendRequest")
Call<String> sendFriendRequest(...);
调用执行:
Response<String> a = myApi.sendFriendRequest(...).execute();
响应正文为“成功”。
【问题讨论】:
需要有一些jsonkey
,比如响应应该是"responsemessage":"Success"
。这就是它抛出异常的原因
您可以将回复原样发布在日志中或邮递员上吗?
【参考方案1】:
我认为使用 Gson 和 Scalar 是不可能的。 Retrofit 无法识别它是纯字符串响应还是 json 字符串响应。
我的方法是只使用Scalar转换器,到处返回String,然后使用Gson在流中手动转换。
以下在 Kotlin 中使用 RxJava 的示例
@GET("path")
fun getVersion(@Path("path") hash: String): Single<String>
api.getVersion()
.map val gson = GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
.create()
gson.fromJson(it, VersionResponse::class.java)
【讨论】:
【参考方案2】:我认为这是因为 Scalar 不能与 Call 包装一起使用
【讨论】:
以上是关于Retrofit2标量转换器在gson转换器android之前不转换的主要内容,如果未能解决你的问题,请参考以下文章
使用 Retrofit2 和 OkHttp3 在 API 获取请求后将 XML 布局转换为 Jetpack Compose
无法在 Retrofit 2.0 android 中获取 json 字符串作为响应