我想在我的android项目中发送原始请求正文。如果我将String用作@Body部分,则它包含“”,因此是错误的。为了解决这个问题,我将RequestBody用于@Body部件,并像
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), "Test");
问题是当我查看改造日志时,请求正文为“ null”,如下所示:
04-08 18:07:20.990 25886-25906/? D/Retrofit: ---> HTTP POST http://TestURL
04-08 18:07:20.990 25886-25906/? D/Retrofit: Content-Type: text/plain; charset=UTF-8
04-08 18:07:20.990 25886-25906/? D/Retrofit: Content-Length: 4
04-08 18:07:20.991 25886-25906/? D/Retrofit: null
04-08 18:07:20.991 25886-25906/? D/Retrofit: ---> END HTTP (4-byte body)
我已经搜索了很多,但是找不到问题所在!我应该提到的是,我使用了1.9改造,目前无法切换到2.x。
更新(添加一些代码):
@Headers("Content-Type: text/plain")
@POST("/GetUserInfo")
void GetUserInfo(@Body RequestBody request, Callback<UserInfo> callback);
最佳答案
对于其他遇到此问题的人,不要使用RequestBody
,而要使用扩展TypedOutput
的类,例如TypedString
,TypedFile
和TypedByteArray
。
参见RequestBuilder
第372行,其中翻新检查主体是否属于TypedOutput
,否则将主体视为可以使用标准(例如Json)转换器序列化的POJO。因此,我相信RequestBody
仅应在Retrofit 2.0+上使用
例如更换
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), "Test");
与
TypedString requestBody = new TypedString("Test");