英文:
Post raw JSON using Retrofit 2
问题
我从另一个应用程序收到了一个大的 JSON 对象,我需要使用 Retrofit 2 发起一个 POST 请求到一个 API。我在这个主题上找到的所有示例或讨论都使用 JSONObject 或者 Map。这意味着我必须解析我的字符串(JSON)以创建 JSONObject 或者 Map。
但是我想直接将我的字符串放入请求体中。
我尝试了以下方式,但是不起作用:
@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);
这样我发送了一个作为请求体的转义字符串,导致我的 JSON 看起来很奇怪。
英文:
I have a big JSON object received from another application and I have to make a post call to an API using Retrofit 2.
All the examples or topics that I find on this topic use an JSONObject or a Map. That means I have to parse my string (JSON) in order to create the JSONObject or Map.
But I want to put directly my string in the body somehow.
I tried this way, but it doesn't work:
@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);
This way I am sending a string that is escaped as a body and my JSON looks strange:
screenshot
答案1
得分: 1
你需要将Scalars Converter添加到Gradle依赖列表中,它会负责将java.lang.String对象转换为text/plain请求体,因为Retrofit默认使用Gson converter。查看此链接获取最新版本。
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);
英文:
You need to add a Scalars Converter to the list of your Gradle dependencies, which would take care of converting java.lang.String objects to text/plain request bodies, beacause Retrofit uses Gson converter by default. Check this link for the latest version.
https://search.maven.org/search?q=g:com.squareup.retrofit2%20a:converter-scalars
dependencies {
implementation “com.squareup.retrofit2:converter-scalars:2.4.0”
..
}
Then, you need to pass a correct converter factory to your Retrofit builder. It will later tell Retrofit how to convert the @Body parameter passed to the service.
val retrofit = Retrofit.Builder()
.client(okHttpClient)
.baseUrl("/")
.addConverterFactory(ScalarsConverterFactory.create())
.build()
After this, it is time for setting up a Retrofit service with a String body parameter.
@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论