Retrofit2を使用して生のJSONを投稿する
Aug 17 2020
別のアプリケーションから大きなJSONオブジェクトを受け取ったので、Retrofit 2を使用してAPIをポストコールする必要があります。このトピックで見つけたすべての例またはトピックは、JSONObjectまたはMapを使用しています。つまり、JSONObjectまたはMapを作成するには、文字列(JSON)を解析する必要があります。
でもどういうわけか自分の弦を直接体に入れたいです。
私はこの方法を試しましたが、機能しません:
@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);
このようにして、本文としてエスケープされた文字列を送信していますが、JSONが奇妙に見えます:スクリーンショット
回答
1 Nemanja Aug 17 2020 at 22:07
RetrofitはデフォルトでGsonコンバーターを使用するため、Gradle依存関係のリストにScalarsConverterを追加する必要があります。これによりjava.lang.Stringオブジェクトからtext / plainリクエストボディへの変換が処理されます。最新バージョンについては、このリンクを確認してください。
https://search.maven.org/search?q=g:com.squareup.retrofit2%20a:converter-scalars
dependencies {
implementation “com.squareup.retrofit2:converter-scalars:2.4.0”
..
}
次に、正しいコンバーターファクトリをRetrofitビルダーに渡す必要があります。後で、サービスに渡された@Bodyパラメーターを変換する方法をRetrofitに指示します。
val retrofit = Retrofit.Builder()
.client(okHttpClient)
.baseUrl("/")
.addConverterFactory(ScalarsConverterFactory.create())
.build()
この後、Stringbodyパラメーターを使用してRetrofitサービスをセットアップします。
@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);