2016-09-13 40 views
0

我有一个API请求,其中POST正文是以纯文本形式传输的十六进制编码的二进制数据。由于我无法辨别的原因,Retrofit2在将十六进制编码的字符串添加到请求前加上引号,这会导致服务器扼杀它并抱怨格式错误的请求。为什么Retrofit2将引号添加到我的POST正文中?

我们正在将我们的应用程序从原始翻新转换为翻新2,并且没有任何有效载荷生成代码已经改变。

我已经能够通过使用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头不同的值尝试。我还没有建立一个自定义类型转换器,因为不得不为一个普通的旧字符串制作其中的一个,看起来应该没有必要。

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

回答

4

双引号是合乎逻辑的,因为翻新是以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); 
+0

但是没有花括号让它成为一个真正的JSON对象,所以它实际上并不是JSON?无论如何,你的建议固定了它,这是主要的。 – Argyle

相关问题