Starting Jackson 2.7.0, java.beans.ConstructorProperties can also be used to deserialize JSON to Java Object via the annotated constructor.
java.beans.ConstructorProperties
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; } ............. }
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 invokedcaller: class com.logicbig.example.ConstructorPropertiesExampleserialized json: {"name":"Trish","dept":"Admin"}-- deserializing --Constructor invokedcaller: class com.fasterxml.jackson.databind.introspect.AnnotatedConstructordeserialized object: Employee{name='Trish', dept='Admin'}
Dependencies and Technologies Used: