In this short article, you'll learn how to ignore unknown JSON properties while parsing JSON to Java Object using Jackson. It is one of the most common problems while parsing JSON data in Java using Jackson API.

Default Jackson Unknown Properties Behavior

By default, Jackson API throws an exception if the Java class doesn't contain all the fields corresponding to all JSON properties.

For example, say we have the following JSON object:

{
  "name": "John Doe",
  "email": "john.doe@example.com",
  "roles": [
    "Member",
    "Admin"
  ],
  "admin": true,
  "age": 32
}

Now we want to deserialize the above JSON object to the following Java class named User:

public class User {

    public String name;
    public String email;
    private String[] roles;
    private boolean admin;

    public User() {
    }

    public User(String name, String email, String[] roles, boolean admin) {
        this.name = name;
        this.email = email;
        this.roles = roles;
        this.admin = admin;
    }

    // getters and setters, toString() .... (omitted for brevity)
}

As you can see above, the User class doesn't contain any field that matches the age JSON property. Trying to parse the above JSON with an unknown property to a User object will result in a UnrecognizedPropertyException exception:

try {
    // JSON string
    String json = "{\"name\":\"John Doe\",\"email\":\"john.doe@example.com\"," +
            "\"roles\":[\"Member\",\"Admin\"],\"admin\":true,\"age\":32}";

    // convert JSON string to Java Object
    User user = new ObjectMapper().readValue(json, User.class);

    // print user
    System.out.println(user);

} catch (Exception ex) {
    ex.printStackTrace();
}

The above code will fail with the following exception:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "age" (class com.attacomsian.User), not marked as ignorable (4 known properties: "name", "email", "roles", "admin"])

To execute the above code successfully, we need to explicitly ignore unknown properties either on class level or globally by configuring ObjectMapper.

Ignore Unknown JSON Properties on Class Level

To ignore all unknown properties for a single class, just place the @JsonIgnoreProperties annotation on top of the class declaration, as shown below:

@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    // ...
}

Now if you execute the above code, you should see the following output without any exception:

User{name='John Doe', email='john.doe@example.com', roles=[Member, Admin], admin=true}

Ignore Unknown JSON Properties Globally

Another way of dealing with unknown properties while parsing JSON is to configure the ObjectMapper class not to fail when it encounters an unfamiliar property:

try {
    // JSON string
    String json = "{\"name\":\"John Doe\",\"email\":\"john.doe@example.com\"," +
            "\"roles\":[\"Member\",\"Admin\"],\"admin\":true,\"age\":32}";

    // create object mapper instance
    ObjectMapper mapper = new ObjectMapper();

    // configure ignore unknown properties
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

    // convert JSON string to Java Object
    User user = mapper.readValue(json, User.class);

    // print user
    System.out.println(user);

} catch (Exception ex) {
    ex.printStackTrace();
}

For more Jackson examples, check out the How to read and write JSON using Jackson in Java tutorial.

✌️ Like this article? Follow @attacomsian on Twitter. You can also follow me on LinkedIn and DEV. Buy me a coffee (cost $3)

Need help to start a new Spring Boot or MEAN stack project? I am available for contract work. Hire me to accomplish your business goals with engineering and design. Let’s talk about your project: hi@attacomsian.com.