java - 对 json 的一部分使用不同的对象映射器
问题描述
对于我们的服务输入,我们使用具有某些配置的对象映射器来序列化它。我们在客户端库中为客户端提供相同的对象映射器配置,并在我们的端使用相同的对象映射器配置来反序列化输入。
现在我们正在向我们的输入添加另一个对象,该对象由一个共同的团队拥有,并拥有自己的对象映射器配置来正确序列化它。
class MyAPIRequest {
MyOtherOwnedClass1 obj1;
MyOtherOwnedClass2 obj2;
//New Shared class which is being added as part of input now:
CommonlyOwnedClass newObj;
}
class MyAPIRequestObjectMapperFactory() {
static ObjectMapper newInstance(IonSystem ionSystem) {
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
objectMapper.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE);
objectMapper.setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);
return objectMapper;
}
}
class CommonlyOwnedClassObjectMapperFactory() {
static ObjectMapper newInstance(IonSystem ionSystem) {
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.NONE);
objectMapper.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.ANY);
objectMapper.setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.ANY);
return objectMapper;
}
}
如何更新我的 ObjectMapper 以CommonlyOwnedClassObjectMapperFactory
对 newObj 使用不同的 ObjectMapper(由 提供)并继续对 inMyAPIRequestObjectMapperFactory
中的其余对象使用现有对象映射器(in )MyAPIRequest
?
编辑:我正在使用 Jackson-2.8,但如果需要可以升级到 2.9
解决方案
setVisibility 方法由受保护的配置变量控制(2.8 中的 _serializationConfig 和 _deserializationConfig 以及 2.9 中的 _configOverrides)。方法 setVisibility 被重载,它需要一个可见性检查器来覆盖内部配置变量。您可以通过从外部映射器获取可见性检查器来使用重载版本为映射器设置配置。
ObjectMapper yourObjectMapper = MyAPIRequestObjectMapperFactory.newInstance();
ObjectMapper externalObjectMapper = CommonlyOwnedClassObjectMapperFactory.newInstance();
yourObjectMapper.setVisibility(externalObjectMapper.getVisibilityChecker());
//then set your visibility
推荐阅读
- java - 添加 GitLab 私有存储库作为 Maven 依赖项
- python - 行上的 Django/django-tables2 html 表格单击以编辑表格
- c# - 如何从另一个类访问一个类的实例?
- google-app-engine - AppEngine 标准 Python 3.7 不提供带有 500 响应的错误消息
- python - 控制硬件的 Raspberry Pi Web 服务器
- java - 用于检查特定身份的 Spring 安全标签
- reactjs - react-redux:在 API 调用后渲染组件
- spring - 我想通过验证从 XML 和 JSON 获得的输入在 DB2 中创建元素,并且需要存储在 DB2 中?
- html - 导航栏 - 需要将顶线和底线扩展到 100%
- python - 遍历 excel 文件,将列添加到系列中,并使用 Panda 库保存结果