2017-06-01 35 views
-1

我指的是SO Thread,但無法生成適當的API請求。 API請求如下無法發送整個JSON作爲身體參數在API改造2

請求:

{ 
    "clientId": "[email protected]", 
    "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參數不能用於 用形式或多部分編碼。

+0

從Api界面中刪除@FormUrlEncoded –

+0

然後顯示@Field參數只能用於表單編碼。 –

+0

然後在JSON模型類中添加clientId,並使用@HEADER發送標頭值。所以最後你的界面如下所示:public Observable doAddBatch(@Body BatchModel product); –

回答

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","[email protected]"); 
map.put("product", batchModel); 

將此地圖作爲身體參數傳遞給api調用我希望這可以解決您的問題

+0

非常感謝。它做到了。 –