Add Additional Fields with @JacksonInject

@JacksonInject annotation is particularly valuable when you need to supply contextual data or configuration settings that are not present in the JSON being deserialized.

To utilize the@JacksonInject annotation, follow these steps:

  • Create a field in your class and annotate it with @JacksonInject.
  • The field’s type should match the type of the value you want to inject.
  • During deserialization, Jackson will look for a matching value based on the field’s type and name.

Here’s an example:


public class Person {
    private Long id;
    private String name;
    @JacksonInject("processTimeInMills")
    private Long processTimeInMills;

    // Getters and setters (not shown for brevity)
}

In the above example, the processTimeInMills field is annotated with @JacksonInject. During deserialization, Jackson will look for a value of type String with the name processTimeInMills and inject it into the Person object.

        String json = "{\"id\": 1, \"name\": \"Alice\"}";

        InjectableValues.Std injectableValues = new InjectableValues.Std()
                .addValue("processTimeInMills", System.currentTimeMillis());

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setInjectableValues(injectableValues);

        Person person = objectMapper.readValue(json, Person.class);

        System.out.println("Person ID: " + person.getId());
        System.out.println("Person Name: " + person.getName());
        System.out.println("Process Time: " + person.getProcessTimeInMills());
    }
    }

Output:

Person ID: 1
Person Name: Alice
Process Time: 1698322949038

Changing Field Names for Deserialization

@JsonProperty annotation also works for deserialization.

private static void deserialize() throws JsonProcessingException {
        String json = "{\"id\":1,\"full_name\":\"Alice\",\"birth_date\":\"1990-05-15\"}";
        ObjectMapper objectMapper = new ObjectMapper();
        Person person = objectMapper.readValue(json, Person.class);

        System.out.println("JSON String to Person object: " + person);
    }

Tht output:

JSON String to Person object: Person(id=1, name=Alice, dateOfBirth=1990-05-15)

Read More