2016-07-13 31 views
1

ich die folgende Fehlermeldung konfrontiert jedes Mal, wenn ich eine Serveranfrage tun, da ich von Retrofit 1,9 bis 2,0Retrofit 2 und Gson java.lang.IllegalArgumentException: Feld Karte enthaltenen Nullwert für Schlüssel

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

die Methode, die ich nennen bekommt eine Karte mit allen Parametern wie den folgenden Code:

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

aber scheint, dass, wenn wir einen der Einträge mit einem NULL-Wert haben, dann wirft er eine Ausnahme und nicht ausführen, auch die anfordern.

wir verwenden auch Dolch 2. Dies ist, wie die Gson mit einem Converter.Factory erstellt:

@Provides 
    @Singleton 
    Converter.Factory provideGsonConverterFactory() { 

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

Vor der Migration 2.0 nachrüsten wir dieses Problem nicht haben, die ungerade ist.

der Tat hat Jackson eine Eigenschaft, die es tun würde:

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

Wer wirft diesen Fehler, Gson oder Retrofit/okhhtp? –

+0

Am Anfang dachte ich, es war aber GSON, später fand ich heraus, dass es Retrofit war. Überprüfen Sie die Zeile 208 https://github.com/square/retrofit/blob/master/retrofit/src/main/java/retrofit2/ParameterHandler.java –

+0

BTW, ich bin immer noch interessiert zu wissen, wie dies zu tun ist. –

Antwort

2

Von retrofit2, jede Karte (FiledMap, QueryMap, PartMap) nicht null Schlüssel oder Werte annehmen. Siehe Document maps don't allow null anywhere.

+0

danke für den Link, das ist, was wir oben diskutierten, gibt es keine Dokumentation. –

+1

Meinst du, abgesehen von der Dokumentation auf '@ FieldMap', die explizit angibt, was du tust, ist es nicht erlaubt, dass es keine Dokumentation gibt? –