我想在我的android项目中发送原始请求正文。如果我为@Body部分使用String,它包含""所以这是错的。为了解决这个问题,我在@Body部分使用了RequestBody,并创建了像
这样的RequestBodyRequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), "Test");
问题是,当我查看改造日志时,请求正文是“空白”。如下:
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);
答案 0 :(得分:1)
对于遇到此问题的其他人,不要使用RequestBody
,而应使用扩展TypedOutput
的类,例如TypedString
,TypedFile
和{{1} }。
请参见TypedByteArray
第372行,其中翻新检查主体是否为RequestBuilder
,否则将主体视为可以使用标准(例如Json)转换器序列化的POJO。因此,我相信TypedOutput
仅应用于Retrofit 2.0 +
例如替换
RequestBody
使用
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), "Test");
答案 1 :(得分:0)
Finally I had to upgrade to retrofit 2.x and the solution on this link solve my problem. It doesn't need to create RequestBody anymore.