Retrofit注册gson和jackson转换器工厂



我有一个同时使用jackson和gson反序列化器的遗留项目。我想使用改造来解析数据。然而问题是,无论是JacksonConverterFactoryGsonConverterFactory为responseBodyConverter返回null。这是jackson 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实现。我正在寻找一种在jackson中查看映射器模块并确定是否有客户反序列化器的方法。然而,从文档和公共API中,我似乎找不到注册的反序列化器。

我这样做对吗?

我不知道你是什么意思,但据我所知,你想同时使用的转换器工厂,并自定义他们,以您的喜好。如果是这样的话,你可以看看这个:https://www.baeldung.com/jackson-vs-gson。希望能帮到你。