首页 > 解决方案 > 使用 Retrofit 2 发布原始 JSON

问题描述

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

但我想以某种方式直接将我的字符串放入体内。

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

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

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

标签: javaandroidjsonretrofit2

解决方案


您需要将 Scalars Converter 添加到 Gradle 依赖项列表中,这将负责将 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);

推荐阅读