我想在我的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的类,例如TypedStringTypedFileTypedByteArray

参见RequestBuilder第372行,其中翻新检查主体是否属于TypedOutput,否则将主体视为可以使用标准(例如Json)转换器序列化的POJO。因此,我相信RequestBody仅应在Retrofit 2.0+上使用

例如更换

RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), "Test");




TypedString requestBody = new TypedString("Test");

10-08 17:47