繁体   English   中英

为什么 Retrofit2 在我的 POST 正文中添加引号?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM