Search code examples
javaspringjacksonjackson-databind

Jackson json only convert selected fields and methods


With jackson there is a way to ignore some fields using @JsonIgnore. Is there a way to do the opposite, and only show fields with are annotated? I'm working with an external class with a lot of fields and I only want to select a small subset of them. I'm getting tons of recursion problems (using some type of ORM) where object A -> B -> A -> B -> A .... which are not even necessary to export.


Solution

  • You can configure the object mapper to ignore absolutely everything unless specified by JsonProperty,

    public class JacksonConfig {
        
        public static ObjectMapper getObjectMapper(){
        //The marshaller
        ObjectMapper marshaller = new ObjectMapper();
    
        //Make it ignore all fields unless we specify them
        marshaller.setVisibility(
            new VisibilityChecker.Std(
                JsonAutoDetect.Visibility.NONE,
                JsonAutoDetect.Visibility.NONE,
                JsonAutoDetect.Visibility.NONE,
                JsonAutoDetect.Visibility.NONE,
                JsonAutoDetect.Visibility.NONE
            )
        );
    
        //Allow empty objects
        marshaller.configure( SerializationFeature.FAIL_ON_EMPTY_BEANS, false );
    
        return marshaller;
        
        }
    }
    
    public class MyObject {
    
        private int id;
        @JsonProperty
        private String name;
        private Date date;
    
    //Getters Setters omitted
    

    in this case only name would be serialized.

    Sample repo, https://github.com/DarrenForsythe/jackson-ignore-everything