Retrofit 2和GSON java.lang.IllegalArgumentException:字段映射包含key的空值

时间:2016-07-13 14:41:14

标签: java android retrofit2 gson

我每次执行服务器请求时都会遇到以下错误,因为我从改装1.9迁移到2.0

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 。这就是使用 Converter.Factory

创建GSON的方法
    @Provides
    @Singleton
    Converter.Factory provideGsonConverterFactory() {

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

在迁移到Retrofit 2.0之前,我们没有遇到这个问题,这很奇怪。

事实上,杰克逊有一个可以做到这一点的财产:

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

1 个答案:

答案 0 :(得分:3)

从retrofit2开始,任何地图(FiledMap,QueryMap,PartMap)都不接受空键或值。见Document maps don't allow null anywhere.