java使用Jackson ObjectMapper的默认展开序列化程序
我有一个自定义的JsonSerializer
,在serialize()
方法中,我想使用已注册的ObjectMapper
的默认序列化程序行为:
class Serializer extends JsonSerializer<MyEntity> {
private ObjectMapper myObjectMapper;
@Override
public void serialize(MyEntity value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
// after processing some logic
myObjectMapper.getSerializerProviderInstance().defaultSerializeValue(value, gen);
}
}
上面的代码运行良好。现在我想做一件类似的事情,但是对于UnwrappingSerializer
,我的意思是我想将unwrappingSerializer委托给注册的ObjectMapper
类似这样的事情:
class UnwrappingSerializer extends JsonSerializer<MyEntity> {
private ObjectMapper myObjectMapper;
@Override
public boolean isUnwrappingSerializer() {
return true;
}
@Override
public void serialize(MyEntity value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
// after processing some logic
myObjectMapper.getDefaultUnwrappingSerializer().serialize(value); // how to do such a thing???
}
}
我不确定杰克逊是否支持这样的事情。我知道另一个选项是扩展UnwrappingBeanSerializer
,这也很好,对我来说唯一重要的是我想将展开序列化委托给ObjectMapper,我不想手动执行。有没有办法做到这一点
# 1 楼答案
您始终可以创建ObjectMapper的新实例,并在序列化程序中使用它