【问题标题】:Retrofit2 scalar converter not converting before gson converter androidRetrofit2标量转换器在gson转换器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"}。这就是它抛出异常的原因
  • 您可以将回复原样发布在日志中或邮递员上吗?

标签: android gson retrofit


【解决方案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 包装一起使用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多