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

Jos*_*hon 2 java android gson retrofit2

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

java.lang.IllegalArgumentException: Field map contained null 
value for key 'installments'.
Run Code Online (Sandbox Code Playgroud)

我调用的方法获取一个包含所有参数的 Map,如下面的代码:

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

但似乎每当我们有一个具有 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);
    }
Run Code Online (Sandbox Code Playgroud)

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

事实上,杰克逊有一个属性可以做到:

      ObjectMapper mapper = new ObjectMapper().configure(SerializationConfig
.Feature.WRITE_NULL_MAP_VALUES, false);
Run Code Online (Sandbox Code Playgroud)

小智 7

从retrofit2 开始,任何映射(FiledMap、QueryMap、PartMap)都不接受空键或空值。请参阅文档映射在任何地方都不允许为 null。

  • 您的意思是除了“@FieldMap”上的文档明确说明您在做什么是不允许的之外,没有文档吗? (2认同)