2016-07-13 1 views
1

Je suis face à l'erreur suivante chaque fois que je fais une demande de serveur depuis que je migré de retrofit 1,9 à 2,0Rénovation 2 et GSON java.lang.IllegalArgumentException: carte du champ contient la valeur null pour la clé

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

la méthode que j'appelle obtient une carte avec tous les paramètres tels que le code ci-dessous:

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

mais semble que chaque fois que nous avons l'une des entrées d'une valeur NULL, elle génère une exception et n'exécutent même pas la demande. Nous utilisons également Dagger 2. voici comment le GSON est créé avec un Converter.Factory:

@Provides 
    @Singleton 
    Converter.Factory provideGsonConverterFactory() { 

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

Avant de migrer vers Retrofit 2.0 nous n'avions pas ce problème, ce qui est étrange.

En effet, Jackson a une propriété qui le ferait:

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

Qui jette cette erreur, gson ou retrofit/okhhtp? –

+0

au début je pensais que c'était GSON mais, plus tard, j'ai découvert qu'il s'agissait de Retrofit. vérifiez la ligne 208 https://github.com/square/retrofit/blob/master/retrofit/src/main/java/retrofit2/ParameterHandler.java –

+0

BTW, je suis toujours intéressé à savoir comment faire cela. –

Répondre

2

De retrofit2, une carte (FiledMap, QUERYMAP, PartMap) n'a pas accepté la clé nulle ou des valeurs. Voir Document maps don't allow null anywhere.

+0

merci pour le lien, c'est ce dont nous parlions plus haut, il n'y a pas de documentation. –

+1

En dehors de la documentation de '@ FieldMap' qui indique explicitement ce que vous faites n'est pas autorisé il n'y a pas de documentation? –