2016-06-14 19 views
10

我正在嘗試使用改裝2進行POST請求。請求類型爲form-data不是application/x-www-form-urlencoded僅使用表格數據進行改造2

我只發佈數據而不是請求中的文件,響應的形式是JSON。我試過@FormUrlEncoded, @Multipart但它不起作用。

我曾嘗試以下請求

1.首先嚐試

@FormUrlEncoded 
@POST("XXXX") 
Call<PlanResponse> getPlanName(@Field(Constants.ACTION_ID) String actionId, @Field(Constants.OFFER_CODE) String offerCode); 

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-dataapplication/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 

我只能添加從郵差

+0

'multipart/form-data'支持。通常僅在請求有效負載很大時才使用 - 例如文件上傳的情況就是如此。 – gldraphael

+0

你的後端怎麼不能處理urlencoded的東西? – njzk2

+0

@gldraphael那麼我在這裏想念什麼?我嘗試了3次嘗試,都給了我一個空的迴應。我覺得一切都是對的。 –

回答

20

剪斷HTTP生成的代碼在改造2.0到像上面進行POST請求,你應該使用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); 
+0

你的回答是正確的,儘管我已經編輯了你的答案'@Part(Constants.OFFER_CODE)RequestBody offerCode'。 –

+0

謝謝你保存了一天。 – krisDrOid

+0

我正在嘗試使用Retrofit 2進行POST請求,並且請求類型是form-data。嘗試使用'@Field,@Query,@ Body'。但是具有RequestBody的'@ Part'就是它。謝謝! –