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);
我从另一个应用程序收到了一个很大的 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);