例如,如果我声明 Map<String,Object>
使用混合类型值集,我尝试使用自定义 TypeResolverBuilder
进行序列化,我无权访问该值的运行时类型。
但是如果我想为某些值写入类型信息而不是其他值,那么如何实现呢?我一直在阅读 DefaultSerializerProvider
它似乎忽略了运行时类型,只使用 JavaType(即 Object.class)
我们正在使用 Jackson 2.9
最佳答案
如果您能够编辑需要控制输出的 POJO,您应该能够扩展 JsonSerializer
并且仅在序列化方法的输出中写入您想要的信息。
您还可以注释您的映射以提供自定义序列化程序并使用 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
}
}
关于java - 如果一个java pojo被声明为一个对象,那么如何根据运行时类型控制jackson序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50911938/