Jackson serialization: how to ignore superclass properties

后端 未结 5 944
走了就别回头了
走了就别回头了 2020-12-10 00:58

I want to serialize a POJO class which is not under my control, but want to avoid serializing any of the properties which are coming from the superclass, and not from the fi

5条回答
  •  一个人的身影
    2020-12-10 01:11

    You can register a custom Jackson annotation intropector which would ignore all the properties that come from the certain super type. Here is an example:

    public class JacksonIgnoreInherited {
    
        public static class Base {
            public final String field1;
    
            public Base(final String field1) {
                this.field1 = field1;
            }
        }
    
        public static class Bean extends Base {
            public final String field2;
    
            public Bean(final String field1, final String field2) {
                super(field1);
                this.field2 = field2;
            }
        }
    
        private static class IgnoreInheritedIntrospector extends JacksonAnnotationIntrospector {
            @Override
            public boolean hasIgnoreMarker(final AnnotatedMember m) {
                return m.getDeclaringClass() == Base.class || super.hasIgnoreMarker(m);
            }
        }
    
        public static void main(String[] args) throws JsonProcessingException {
            final ObjectMapper mapper = new ObjectMapper();
            mapper.setAnnotationIntrospector(new IgnoreInheritedIntrospector());
            final Bean bean = new Bean("a", "b");
            System.out.println(mapper
                            .writerWithDefaultPrettyPrinter()
                            .writeValueAsString(bean));
        }
    
    }
    

    Output:

    { "field2" : "b" }

提交回复
热议问题