2016-09-13 186 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

相關問題