[英]Why is Retrofit2 adding quotes to my POST body?
我有一个 API 请求,其中POST
主体是作为纯文本传输的十六进制编码的二进制数据。 由于我无法辨别的原因,Retrofit2 在将十六进制编码的字符串添加到请求之前添加引号,这会导致服务器阻塞它并抱怨格式错误的请求。
我们正在将我们的应用程序从原始 Retrofit 转换为 Retrofit2,并且负载生成代码根本没有改变。
我已经能够通过使用Interceptor
在运行时从请求正文中删除封闭的引号来解决这个问题,但这似乎是一个必须跳过的非常愚蠢的圈子,我宁愿不出现引号首先。
我的界面是这样的:
public interface SampleApi {
@POST("sample-endpoint")
Call<ApiResponse> postThing(@Body String hexEncodedData,
@Header(HttpHeaders.DATE) String gmtDateStr,
@Header("X-CUSTOM-ONE") long custom1,
@Header("X-CUSTOM-TWO") String custom2);
}
我已经尝试将Content-Type
标头设置为各种值,但没有明显效果。 我还没有构建自定义类型转换器,因为必须为一个普通的旧字符串制作其中之一似乎没有必要。
有人能告诉我我做错了什么吗?
双引号是合乎逻辑的,因为改造是以 json 格式发送数据,所以如果类型为 String 则双引号。 试试这个它可能会帮助你。
public interface SampleApi {
@POST("sample-endpoint")
Call<ApiResponse> postThing(@Body RequestBody hexEncodedData,
@Header(HttpHeaders.DATE) String gmtDateStr,
@Header("X-CUSTOM-ONE") long custom1,
@Header("X-CUSTOM-TWO") String custom2);
}
String strRequestBody = "body";
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"),strRequestBody);
更新,对于 Kotlin,Code_Life 代码应如下所示:
interface SampleApi {
@POST("sample-endpoint")
suspend fun postThing(
@Body presentation: RequestBody,
@Header(HttpHeaders.DATE) gmtDateStr: String,
@Header("X-CUSTOM-ONE") custom1: Long,
@Header("X-CUSTOM-TWO") custom2: String
): Call<ApiResponse>
}
val strRequestBody = "body"
val requestBody = strRequestBody.toRequestBody("text/plain".toMediaTypeOrNull()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.