Close

Jackson JSON - Using @ConstructorProperties to deserialize JSON via constructor

[Last Updated: Aug 11, 2020]

Starting Jackson 2.7.0, java.beans.ConstructorProperties can also be used to deserialize JSON to Java Object via the annotated constructor.

Example

POJO

public class Employee {
    private String name;
    private String dept;

    @ConstructorProperties({"name", "dept"})
    public Employee(String name, String dept) {
        System.out.println("Constructor invoked");
        //Java 9 StackWalker to find out the caller
        System.out.println("caller: " + StackWalker.getInstance(
                StackWalker.Option.RETAIN_CLASS_REFERENCE).getCallerClass());
        this.name = name;
        this.dept = dept;
    }
    .............
}

Main class

public class ConstructorPropertiesExample {
    public static void main(String[] args) throws IOException {
        System.out.println("-- serializing --");
        Employee employee = new Employee("Trish", "Admin");
        //convert to json
        String jsonString = toJson(employee);
        System.out.println("serialized json: " + jsonString);

        System.out.println("-- deserializing --");
        Employee e = toEmployee(jsonString);
        System.out.println("deserialized object: " + e);
    }

    private static Employee toEmployee(String jsonData) throws IOException {
        ObjectMapper om = new ObjectMapper();
        return om.readValue(jsonData, Employee.class);
    }

    private static String toJson(Employee employee) throws IOException {
        ObjectMapper om = new ObjectMapper();
        return om.writeValueAsString(employee);
    }
}
-- serializing --
Constructor invoked
caller: class com.logicbig.example.ConstructorPropertiesExample
serialized json: {"name":"Trish","dept":"Admin"}
-- deserializing --
Constructor invoked
caller: class com.fasterxml.jackson.databind.introspect.AnnotatedConstructor
deserialized object: Employee{name='Trish', dept='Admin'}

Example Project

Dependencies and Technologies Used:

  • jackson-databind 2.9.7: General data-binding functionality for Jackson: works on core streaming API.
  • JDK 11
  • Maven 3.5.4

@ConstructorProperties Example Select All Download
  • jackson-constructor-properties
    • src
      • main
        • java
          • com
            • logicbig
              • example
                • Employee.java

    See Also