使用 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,SerializerProvider serializers) throws IOException {

            // after processing some logic

            myObjectMapper.getDefaultUnwrappingSerializer().serialize(value); // how to do such a thing???

        }

    }

我不确定杰克逊是否支持这样的事情。我知道另一种选择是扩展 UnwrappingBeanSerializer,这也很好,对我来说唯一重要的是我想将解包序列化委托给 ObjectMapper,我不想手动完成。有没有办法做到这一点?

解决方法

您始终可以创建 ObjectMapper 的新实例并在序列化程序中使用它。