Lucas
Lucas

Reputation: 738

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.

Upvotes: 3

Views: 2699

Answers (3)

user14104736
user14104736

Reputation:

You can use @JsonIgnoreProperties(ignoreUnknown=true) on the pojo class so only the fields which are available in the pojo class will be mapped and resf will be left out.

For example

Json data

{
"name":"Abhishek",
"age":30,
"city":"Banglore",
"state":"Karnatak"
}

pojo class

 @JsonIgnoreProperties(ignoreUnknown=true)
Class Person{
   private int id;
   private String name;
   private String city;
}

Here state in not present in the Person class so that field won't be mapped

Upvotes: 1

Darren Forsythe
Darren Forsythe

Reputation: 11411

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

Upvotes: 1

Guda uma shanker
Guda uma shanker

Reputation: 182

Yes definitely you can; Create a class with only the feilds you need and add the below property in the object mapper and rest is done.

DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES to false

Upvotes: 1

Related Questions