android - 改造注册 gson 和 jackson 转换器工厂
问题描述
我有一个同时使用 jackson 和 gson 反序列化器的遗留项目。我想使用改造来解析其中的数据。然而问题是JacksonConverterFactory或GsonConverterFactory都没有为 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 来看,我似乎找不到已注册的反序列化器。
我会以正确的方式解决这个问题吗?
解决方案
推荐阅读
- javascript - NodeJS 用户注册/验证器
- javascript - 如何在 react-select 中调用 Animated() 函数以及组件属性中的其他组件?
- iot - ThingsBoard 规则链将遥测重新发布到新主题
- javascript - Javascript/Jquery 不断检查
- python - 基于alt属性的python selenium点击
- neo4j - 如何使用 Neo4j Grass 样式文件创建具有节点 ID 的复合标题?
- ios - estimote/kontakt 如何识别特定的信标?
- java - 由于实体脏度检查,SpringBoot/Hibernate 在只读事务下从查找存储库方法触发更新查询
- c# - 在 Razor Pages 中为页面处理程序方法授权 Tag Helper
- html - 为什么这个 ng-if 语句不能正确评估?