使用改造的 POST 正文 JSON



我正在尝试使用改造库发布 JSONObject,但是当我在接收端看到请求时,内容长度0 .

在 RestService 界面中:

@Headers({
        "Content-type: application/json"
})
@POST("/api/v1/user/controller")
void registerController( 
     @Body JSONObject registrationBundle, 
     @Header("x-company-device-token") String companyDeviceToken, 
     @Header("x-company-device-guid") String companyDeviceGuid, 
     Callback<JSONObject> cb);

它被召唤,

mRestService.registerController(
    registrationBundle, 
    mApplication.mSession.getCredentials().getDeviceToken(), 
    mApplication.mSession.getCredentials().getDeviceGuid(),
    new Callback<JSONObject>() {
        // ...
    }
)

而且我确定registrationBundle,这是一个JSONObject不是空或空的(其他字段当然没问题)。在发出请求的那一刻,它注销为:{"zip":19312,"useAccountZip":false,"controllerName":"mine","registrationCode":"GLD94Q"}

在请求的接收端,我看到请求已Content-type: application/json但已Content-length: 0

有什么理由为什么像这样在正文中发送 JSON 不起作用?我在使用改造时是否缺少一些简单的东西?

默认情况下,如果需要 JSON 请求正文,则无需设置任何标头。每当您测试改造代码时,我建议您在 RestAdapter 实例上设置.setLogLevel(RestAdapter.LogLevel.FULL)。这将显示完整的请求标头和正文以及完整的响应标头和正文。

发生的情况是您设置内容类型两次。然后你传递一个 JSONObject,它通过 GsonConverter 传递并被破坏成看起来像{"nameValuePairs":YOURJSONSTRING},其中YOURJSONSTRING包含完整的预期 JSON 输出。出于显而易见的原因,这不适用于大多数 REST API。

您应该跳过弄乱默认情况下已经设置为 UTF-8 的 JSON 的内容类型标头。另外,不要将 JSONObject 传递给 GSON。传递一个 Java 对象供 GSON 转换。

如果您使用的是回调,请尝试此操作:

@POST("/api/v1/user/controller")
void registerController(
    @Body MyBundleObject registrationBundle,
    @Header("x-company-device-token") String companyDeviceToken,
    @Header("x-company-device-guid") String companyDeviceGuid,
    Callback<ResponseObject> cb);

我还没有测试过这个确切的语法。

同步示例:

@POST("/api/v1/user/controller")
ResponseObject registerController(
    @Body MyBundleObject registrationBundle,
    @Header("x-company-device-token") String companyDeviceToken,
    @Header("x-company-device-guid") String companyDeviceGuid);

相关内容

  • 没有找到相关文章

最新更新