Retrofit 2 和 GSON java.lang.IllegalArgumentException:字段映射包含键的空值
Retrofit 2 and GSON java.lang.IllegalArgumentException: Field map contained null value for key
自从我从改装 1.9 迁移到 2.0
以来,每次我发出服务器请求时都会遇到以下错误
java.lang.IllegalArgumentException: Field map contained null
value for key 'installments'.
我调用的方法获取了一个包含所有参数的地图,如下面的代码:
@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);
从 retrofit2 开始,任何地图(FiledMap、QueryMap、PartMap)都不接受空键或空值。参见 Document maps don't allow null anywhere.
自从我从改装 1.9 迁移到 2.0
以来,每次我发出服务器请求时都会遇到以下错误java.lang.IllegalArgumentException: Field map contained null
value for key 'installments'.
我调用的方法获取了一个包含所有参数的地图,如下面的代码:
@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);
从 retrofit2 开始,任何地图(FiledMap、QueryMap、PartMap)都不接受空键或空值。参见 Document maps don't allow null anywhere.