Post 原始 JSON 使用 Retrofit 2

Post raw JSON using Retrofit 2

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

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

我试过这个方法,但是不行:

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

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

您需要将标量转换器添加到 Gradle 依赖项列表中,这将负责将 java.lang.String 对象转换为 text/plain 请求主体,因为 Retrofit 使用 Gson 转换器默认。检查此 link 以获得最新版本。

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 正文参数设置 Retrofit 服务了。

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