5

我以前成功地使用 Square 的Retrofit@GET进行Web API 调用,但是当尝试@BODY@POST调用中发送 JSON 时,在服务器(Rails)上,JSON 显示为参数而不是正文请求。

我的理解是,@BODY会将该方法参数添加到正文中的请求中。

知道我做错了什么吗?

网络接口

@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);
4

1 回答 1

12

事实证明,如果您想将数据作为请求正文的一部分进行发布,您需要将 API 接口方法注释为@FormUrlEncoded并将正文的内容作为 a 传递,@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
);
于 2013-09-20T04:00:52.300 回答