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

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

我之前曾使用 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/

相关文章:

android - flutter 错误 : type 'int' is not a subtype of type 'String' in type cast

javascript - 如何在 React JS 上通过 Ajax 发布新数据

javascript - jQuery.post动态数据回调函数

ruby-on-rails - 我如何用 rspec 测试这个?

ruby-on-rails - 使用 devise rails 将 SignIn 和 SignUp 放在单个页面中

c# - 搜索电子邮件时在 OWA 上执行 POST 请求时出现 400 错误请求

android - 在 Android Kotlin 中创建类扩展 AsyncTask 而不泄漏上下文对象

android - 向下拖动时,Android List View 动画

android 到 android 音频直播

ruby-on-rails - 如何显示关联记录子集的表单,其中一些尚不存在?