2016-06-14 49 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'就是它。谢谢! –