首页 > 解决方案 > 改造注册 gson 和 jackson 转换器工厂

问题描述

我有一个同时使用 jackson 和 gson 反序列化器的遗留项目。我想使用改造来解析其中的数据。然而问题是JacksonConverterFactoryGsonConverterFactory都没有为 responseBodyConverter返回 null。IE 这里是杰克逊 impl:

  @Override
  public Converter<ResponseBody, ?> responseBodyConverter(
      Type type, Annotation[] annotations, Retrofit retrofit) {
    JavaType javaType = mapper.getTypeFactory().constructType(type);
    ObjectReader reader = mapper.readerFor(javaType);
    return new JacksonResponseBodyConverter<>(reader);
  }

在我注册了反序列化器的情况下,我想使用 Jackson,即:

val module = SimpleModule()
module.addDeserializer(User::class.java, UserDeserializer())

val objectMapper = ObjectMapper()
objectMapper.registerModule(module)

val converterFactory = JacksonConverterFactory.create(objectMapper)

因此,在这种情况下,如果用户正在反序列化,请使用 Jackson,否则跳过并查看下一个注册的转换器工厂,在本例中为 gson。

我明白了,因为JacksonConverterFactory从不返回 null,因此将跳过转换器工厂,我需要编写自己的 ConverterFactory impl。我正在杰克逊寻找一种方法来查看映射器模块并确定是否有客户反序列化器。但是,从文档和公共 API 来看,我似乎找不到已注册的反序列化器。

我会以正确的方式解决这个问题吗?

标签: androidjsonjacksongsonretrofit2

解决方案


推荐阅读