
在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>() { // ... }) 而且我确定的是,一个JsONObject的registrationBundle不为null或为空(其他字段当然不错).在请求的时刻,它注销为:{“zip”:19312,“useAccountZip”:false,“controllername”:“mine”,“registrationCode”:“GLD94Q”}.
在请求的接收端,我看到请求具有Content-type:application / Json,但是Content-length:0.
是否有任何原因为什么发送JsON在这样的身体不工作?我在使用Retrofit时缺少一些简单的东西吗?
解决方法 默认情况下,如果您需要JsON请求正文,则不需要设置任何标题.每当您测试Retrofit代码时,建议在RestAdapter实例上设置.setLogLevel(RestAdapter.LogLevel.FulL).这将显示您的完整请求标头和正文以及完整的响应标头和正文.发生的是您正在设置内容类型两次.然后你传递一个JsONObject,它正在通过GsonConverter传递,并且被看作是{“nameValuePairs”:YOUrjsonSTRING},其中YOUrjsonSTRING包含完整的,预期的JsON输出.由于显而易见的原因,这对于大多数REST API将无法正常工作.
默认情况下,您应该跳过已经使用UTF-8设置为JsON的Content-type标头.另外,不要将JsONObject传递给GSON.传递一个Java对象供GSON转换.
如果您使用回调,请尝试:
@POST("/API/v1/user/controller")voID registerController( @Body MyBundleObject registrationBundle,Callback<ResponSEObject> cb); 我还没有测试这个确切的语法.
同步示例:
@POST("/API/v1/user/controller")ResponSEObject registerController( @Body MyBundleObject registrationBundle,@header("x-company-device-guID") String companyDeviceGuID); 总结 以上是内存溢出为你收集整理的android – POST body JSON使用Retrofit全部内容,希望文章能够帮你解决android – POST body JSON使用Retrofit所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)