我之前曾使用 Square 的 Retrofit 成功调用 @GET
web API,但是当我尝试将 JSON 作为 @BODY
发送时@POST
调用,在服务器 (Rails) 上,JSON 显示为参数而不是正文请求。
我的理解是,@BODY
会将那个方法参数添加到正文中的请求中。
知道我做错了什么吗?
WebAPI:
@POST("/api/v1/gear/scans.json")
Response postScans(
@Header(HEADER_AUTH) String token,
@Body JsonObject scans
);
发起网络请求:
RestAdapter restAdapter = new RestAdapter.Builder()
.setServer(api_url)
.build();
WebApi webApi = restAdapter.create(AssetsWebApi.class);
Response response = webApi.postScans(auth_token, valid_json);
最佳答案
原来如果想POST数据作为请求体的一部分,需要将API接口(interface)方法注解为@FormUrlEncoded
,并传递正文作为 @Field
,如下所示:
@FormUrlEncoded
@POST("/api/v1/gear/scans.json")
Response postScans(
@Header(HEADER_AUTH) String token,
@Field("scans") JsonArray scans
);
@Rickster 的异步调用:
@POST("/api/v1/gear/scans.json")
void postScans(
@Header(HEADER_AUTH) String token,
@Body JsonObject scans,
Callback<PostSuccessResponseWrapper> callback
);
关于android - 改造 @Body 在 HTTP 请求中显示为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18908175/