为什么Retrofit2会在我的POST主体中添加引号?

Arg*_*yle 3 java retrofit2

我有一个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);
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试将Content-Type标题设置为各种值,没有明显的效果.我还没有构建自定义类型转换器,因为必须为普通的旧字符串制作其中一个转换器似乎不应该是必需的.

有人能告诉我我做错了什么吗?

Cod*_*ife 9

双引号是合乎逻辑的,因为改造是以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);
Run Code Online (Sandbox Code Playgroud)

  • 但是没有大括号使其成为真正的 JSON 对象,所以它实际上不是 JSON?不管怎样,你的建议解决了这个问题,这才是最重要的。 (2认同)