java - 如果一个java pojo被声明为一个对象,如何根据运行时类型控制jackson序列化?
问题描述
例如,如果我声明Map<String,Object>
带有混合类型值集的 a 并尝试使用 custom 序列化TypeResolverBuilder
,则我无权访问该值的运行时类型。
但是,如果我想为某些值而不是其他值编写类型信息,那如何实现呢?我一直在阅读DefaultSerializerProvider
,它似乎忽略了运行时类型,只使用 JavaType(即 Object.class)
我们正在使用杰克逊 2.9
解决方案
如果您能够在需要控制输出的地方编辑 POJO,您应该能够扩展JsonSerializer
并且只在 serialize 方法的输出中写入您想要的信息。
您还可以注释您的地图以提供自定义序列化程序并使用以下方法查询要序列化的对象instanceof
@JsonSerialize(keyUsing = SpecialSerializer.class)
Map<String, Object> map;
然后在你的序列化器中:
@Override
public void serialize(Object value,
JsonGenerator gen,
SerializerProvider serializers)
throws IOException, JsonProcessingException {
if(value instanceof MySpecialObject){
//special logic here
}
}
推荐阅读
- html - HTML 将页脚内容与页面包装器对齐
- sql - oracle数据库在表列'SYS_###########'中创建什么?
- twilio - Twilio 按内容过滤消息?
- docker - 在 Fedora Docker Image 中找不到任何手册页
- user-interface - 如何在Install4j中禁用屏幕的十字按钮
- django - 数据没有保存到数据库中,而是显示在 Django 的终端上
- botframework - Microsoft Azure 机器人服务主动向群组(会议)聊天发送消息
- uipath - 如何使用 UiPath 打开受密码保护的文件?
- javascript - 在 Ubuntu 上使用 Puppeteer 时 page.setCookie 没有影响
- azure-data-factory-2 - ADF:复制活动突然停止使用其他列