How to access default jackson serialization in a custom serializer

后端 未结 4 1796
梦如初夏
梦如初夏 2020-12-05 10:15

I want to create a custom serializer which does a tiny bit of work and then leaves the rest for default serialization.

For example:

@JsonSerialize(u         


        
4条回答
  •  甜味超标
    2020-12-05 10:55

    A BeanSerializerModifier will provide you access to the default serialization.

    Inject a default serializer into the custom serializer

    public class MyClassSerializer extends JsonSerializer {
        private final JsonSerializer defaultSerializer;
    
        public MyClassSerializer(JsonSerializer defaultSerializer) {
            this.defaultSerializer = checkNotNull(defaultSerializer);
        }
    
        @Override
        public void serialize(MyClass myclass, JsonGenerator gen, SerializerProvider provider) throws IOException {
            if (myclass.getSomeProperty() == true) {
                provider.setAttribute("special", true);
            }
            defaultSerializer.serialize(myclass, gen, provider);
        }
    }
    
    
    

    Create a BeanSerializerModifier for MyClass

    public class MyClassSerializerModifier extends BeanSerializerModifier {
        @Override
        public JsonSerializer modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer serializer) {
            if (beanDesc.getBeanClass() == MySpecificClass.class) {
                return new MyClassSerializer((JsonSerializer) serializer);
            }
            return serializer;
        }
    }
    
    
    

    Register the serializer modifier

    ObjectMapper om = new ObjectMapper()
            .registerModule(new SimpleModule()
                    .setSerializerModifier(new MyClassSerializerModifier()));
    

    提交回复
    热议问题