Map Field Names Using @JsonAlias

The @JsonAlias annotation is used to specify alternate names for properties during deserialization. This allows us to map properties from JSON data to corresponding fields in our Java class, even if the property names don’t match exactly.

Here’s an example:

    private static class Person {
        private Long id;
        @JsonAlias({"user_name", "username"})
        private String name;
        // Constructors, getters, and setters (not shown for brevity)
    }

    public static void main(String[] args) throws IOException {

        String json1 = "{\"id\":1,\"user_name\":\"Alice\"}";
        String json2 = "{\"id\":1,\"username\":\"Alice\"}";
        try {
            Person person = new ObjectMapper().readValue(json1, Person.class);
            System.out.println("Deserialized person object: " + person);
            person = new ObjectMapper().readValue(json2, Person.class);
            System.out.println("Deserialized person object: " + person);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }
    

In this example, we deserialize JSON data that uses username and user_name as the field names, even though our Person class uses name. Thanks to the @JsonAlias annotation, Jackson maps the username and user_name to the name field in the Person object during deserialization.

Deserialized person object: JsonAliasExample.Person(id=1, name=Alice)
Deserialized person object: JsonAliasExample.Person(id=1, name=Alice)

When to Use @JsonAlias

The @JsonAlias annotation is particularly useful in the following scenarios:

  • Handling Varying Property Names: When working with JSON data from different sources or versions, and the property names can vary.
  • Dealing with Underscores: When working with JSON data that uses underscores in property names, you can use @JsonAlias to map these properties to camelCase fields in our Java class.

Read More