【问题标题】:Post raw JSON using Retrofit 2使用 Retrofit 2 发布原始 JSON
【发布时间】:2020-08-17 14:52:50
【问题描述】:

我从另一个应用程序收到一个大的 JSON 对象,我必须使用 Retrofit 2 对 API 进行后调用。 我在这个主题上找到的所有示例或主题都使用 JSONObject 或 Map。这意味着我必须解析我的字符串 (JSON) 才能创建 JSONObject 或 Map。

但我想以某种方式直接将我的字符串放入正文中。

我试过这种方法,但它不起作用:

@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);

这样我发送一个作为正文转义的字符串,我的 JSON 看起来很奇怪: screenshot

【问题讨论】:

    标签: java android json retrofit2


    【解决方案1】:

    您需要在 Gradle 依赖项列表中添加一个 Scalars Converter,这将负责将 java.lang.String 对象转换为 text/plain 请求主体,因为 Retrofit 默认使用 Gson 转换器。检查此链接以获取最新版本。

    https://search.maven.org/search?q=g:com.squareup.retrofit2%20a:converter-scalars

    dependencies {
        implementation “com.squareup.retrofit2:converter-scalars:2.4.0”
        ..
    }
    

    然后,您需要将正确的转换器工厂传递给您的 Retrofit 构建器。稍后它会告诉 Retrofit 如何转换传递给服务的 @Body 参数。

    val retrofit = Retrofit.Builder()
            .client(okHttpClient)
            .baseUrl("/")
            .addConverterFactory(ScalarsConverterFactory.create())
            .build()
    

    在此之后,是时候使用 String body 参数设置 Retrofit 服务了。

    @Headers("Content-Type: application/json")
    @POST("transactions")
    Call<Void> submitTransaction(@Body String body);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      相关资源
      最近更新 更多