POST Retrofit 2を使用してリクエストを作成しようとしています。リクエストタイプはform-data
[〜#〜] not [〜#〜]application/x-www-form-urlencoded
。
リクエスト内のファイルではなくデータのみを投稿しており、レスポンスはJSON形式です。
@FormUrlEncoded, @Multipart
を試しましたが、機能しません。
私は次のリクエストを試みました
1。最初の試行
@FormUrlEncoded
@POST("XXXX")
Call<PlanResponse> getPlanName(@Field(Constants.ACTION_ID) String actionId, @Field(Constants.OFFER_CODE) String offerCode);
2。2回目の試行
@Headers({"Content-Type: multipart/form-data","Content-Type: text/plain"})
@FormUrlEncoded
@POST("XXXX")
Call<PlanResponse> getPlans(@Body @FieldMap(encoded = false) Map<String, String> data);
。3回目の試行
@Headers("Content-Type: multipart/form-data")
@Multipart
@POST("XXXX")
Call<PlanResponse> myPlans(@Part(Constants.ACTION_ID) String actionId, @Part(Constants.OFFER_CODE) String offerCode);
ボディはnullとしてのみ取得しています。 POSTMANと連携しています。
form-data
とapplication/x-www-form-urlencoded
についても検索しましたが、データがバイナリの場合はform-data
を使用し、データがASCIIの場合はapplication/x-www-form-urlencoded
私は見つけようとしていますフォームデータはレトロフィットでサポートされていませんか?
郵便配達員のリクエスト
Cache-Control: no-cache
Postman-Token: XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX
Content-Type: multipart/form-data; boundary=---- WebKitFormBoundaryXXXXXXXXXXXX
----WebKitFormBoundaryXXXXXXXXXXXX
Content-Disposition: form-data; name="actionId"
1000
----WebKitFormBoundaryXXXXXXXXXXXX
Content-Disposition: form-data; name="offerCode"
MYCODE
----WebKitFormBoundaryXXXXXXXXXXXX
POSTMANから取得したHTTP生成コードのみを追加できます
上記のようなPOSTリクエストを実行するためのレトロフィット2.0では、このようにパラメーターにRequestBodyタイプを使用する必要があります。
@Multipart
@POST("XXXX")
Call<PlanResponse> myPlans(@Part(Constants.ACTION_ID) RequestBody actionId, @Part(Constants.OFFER_CODE) RequestBody offerCode);
ここで、StringからrequestBodyを取得する方法。
String somevalue = "somevalue";
RequestBody body = RequestBody.create(MediaType.parse("text/plain"), somevalue);
リクエスト本文を使用した別のソリューションを次に示します。
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("param1", param1)
.addFormDataPart("param2", param2)
.build();
apiInterface.somePostMethod(requestBody).enqueue(
//onResponse onFailure methods
);
ここに私のAPIインターフェイスPOSTメソッド
@POST("somePostMethod")
Call<ResponseBody> somePostMethod(@Body RequestBody body);
それが役に立てば幸い。
IDの配列を既存のリクエストに渡したいと思いました。
ここからいくつかのバリエーションを試しました Retrofit-リクエストボディを配列または数値として送信 、 レトロフィット文字列とURLエンコードされたモデルを使用する必要があるモデルの配列リストでPUTリクエストを送信する方法 、しかし、彼らは働きませんでした。それから Androidレトロフィットx-www-form-urlencodedとして配列を送信 を試しました。
追加した []
をリストパラメーターに、List
をタイプに:
@FormUrlEncoded
@POST("your_request/")
fun sendIds(
@Field("token") token: String,
@Field("city_id") cityId: Int?,
@Field("description") description: String,
@Field("ids[]") ids: List<Int>? // Add '[]' here.
): Deferred<YourResponse>
それからいつものようにそれを呼び出しました(コトリンコルーチンを使用):
api.sendIds("f0123abc", null, "description", listOf(1, 2, 3)).await()
Postmanでどのように見えるかを理解するために、Postman Chrome extension? で配列を送信することは可能ですか?.