改造@Body在HTTP请求中显示为参数

时间:2013-09-20 03:03:40

标签: android ruby-on-rails http-post retrofit

我之前已成功使用Square的 Retrofit 进行@GET网络API调用,但尝试在@BODY调用中将{JSON}作为@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);

1 个答案:

答案 0 :(得分:12)

事实证明,如果您想将 POST 数据作为请求正文的一部分,则需要将API接口方法注释为@FormUrlEncoded并将正文内容作为{传递给{ {1}}如下:

@Field

@Rickster的异步调用:

@FormUrlEncoded
@POST("/api/v1/gear/scans.json")
Response postScans(
    @Header(HEADER_AUTH) String token,
    @Field("scans") JsonArray scans
);