我指的是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参数 使用表单或多部分编码。
答案 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调用我希望这可以解决您的问题