2016-07-13 53 views
1

我面對每次我做一個服務器請求下面的錯誤,因爲我從改型1.9遷移到2.0改造2和GSON java.lang.IllegalArgumentException異常:字段映射包含空值用於密鑰

java.lang.IllegalArgumentException: Field map contained null 
value for key 'installments'. 

我所說的方法獲取一個Map,如下面的代碼的所有參數:

@FormUrlEncoded 
@POST("/api/method") 
Call<Response<Payment>> pay(@FieldMap Map<String, String> fields); 

但目前看來,每當我們有一個NULL值的條目之一,那麼它拋出一個異常,甚至不執行請求。

我們也在使用Dagger 2。這是GSON如何與Converter.Factory創建:

@Provides 
    @Singleton 
    Converter.Factory provideGsonConverterFactory() { 

     Gson gson = new GsonBuilder() 
       .setDateFormat("yyyy-MM-dd hh:mm:ss") 
       .setPrettyPrinting() 
       .create(); 
     return GsonConverterFactory.create(gson); 
    } 

之前遷移到改造2.0我們沒有這個問題,這是奇怪的。

事實上,傑克遜有一個屬性,它會做到這一點:

 ObjectMapper mapper = new ObjectMapper().configure(SerializationConfig 
.Feature.WRITE_NULL_MAP_VALUES, false); 
+0

誰引發此錯誤,gson或retrofit/okhhtp? –

+0

一開始我以爲是GSON,不過後來我發現它是改造的。檢查行208 https://github.com/square/retrofit/blob/master/retrofit/src/main/java/retrofit2/ParameterHandler.java –

+0

順便說一句,我仍然有興趣知道如何做到這一點。 –

回答

2

從retrofit2,任何地圖(FiledMap,QueryMap,PartMap)不接受空鍵或值。請參閱Document maps don't allow null anywhere.

+0

感謝您的鏈接,這是我們上面討論,沒有文件。 –

+1

你的意思除了'@FieldMap'上的文檔是否明確說明你正在做的事情是不允許的,那麼沒有文檔? –

相關問題