问题描述
我有一个自定义 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,SerializerProvider serializers) throws IOException {
// after processing some logic
myObjectMapper.getDefaultUnwrappingSerializer().serialize(value); // how to do such a thing???
}
}
我不确定杰克逊是否支持这样的事情。我知道另一种选择是扩展 UnwrappingBeanSerializer
,这也很好,对我来说唯一重要的是我想将解包序列化委托给 ObjectMapper,我不想手动完成。有没有办法做到这一点?
解决方法
您始终可以创建 ObjectMapper 的新实例并在序列化程序中使用它。