无法在api改造中发送整个json作为Body param 2

时间:2017-06-01 12:13:38

标签: android retrofit2

我指的是SO Thread,但无法生成正确的api请求。 api请求如下

请求

{
  "clientId": "v@gmail.com",
  "products": {
    "productNumber": "8123456789123",
    "batchNumber": "123456789",
    "quantity": 50,
    "salesPrice": 500,
    "purchasePrice": 500,
    "MRP": 600,
    "mfgDate": "15/05/2017",
    "expDate": "15/05/2017"
  }
}

Api界面

@FormUrlEncoded
@POST("/products/addBatch")
public Observable<AddBatchResponse> doAddBatch(@Header(WebServicesTags.TAG_AUTHORIZATION) String token,
                                               @Field(WebServicesTags.TAG_CLIENT_ID) String clientId,
                                               @Body BatchModel product);

以下是我的 Api通话

BatchModel model = new BatchModel(productNumber, batchNumber, quantity, salesPrice, purchasePrice, mRP, mfgDate, expDate);
Observable<AddBatchResponse> addBatch = apiservice.doAddBatch(sessionManager.getKeyToken(), sessionManager.getKeyEmail(), model);
        addBatch.subscribeOn(Schedulers.newThread())

将此api称为错误

  

java.lang.IllegalArgumentException:不能使用@Body参数   使用表单或多部分编码。

1 个答案:

答案 0 :(得分:1)

你可以使用@Field和@FormUrlEncoded或@Body ..你不能同时使用它们

执行类似

的操作
@POST("/products/addBatch")
public Observable<AddBatchResponse> doAddBatch(@Header(WebServicesTags.TAG_AUTHORIZATION) String token,
                                           @Body HashMap<String, Object> map);

在发布数据时创建地图

HashMap<String,Object> map  = new HashMap<String, Object>();
map.put("clientId","v@gmail.com");
map.put("product", batchModel);

将此地图作为身体参数传递给api调用我希望这可以解决您的问题