有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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