Jackson change json field name

Suppose there is a java class as below

public class Child {
   private String dateOfBirth;

   // getter and setter
}

When an object of this class is serialized using Jackson ObjectMapper, the resulting json string will be

{"dateOfBirth": "11/11/2021"}

where keys of json string are the same as the properties of java class.

But, what we want is a response as below

{"dob": "11/11/2021"}

with keys of json string other than properties of the class.
In this article, we will understand how to do this in Jackson.

@JsonProperty annotation
This annotation can be used to change the name of a property or field at serialization.
Required name can be written directly after the annotation or along with value attribute as shown below

import com.fasterxml.jackson.annotation.JsonProperty;

public class Child { 

  @JsonProperty("dob")
  private String dateOfBirth; 

  // getter and setter 
}

Below declaration is also valid

@JsonProperty(value="dob")
private String dateOfBirth;

Providing empty value with JsonInclude means there will be no change in property during serialization.
Jackson docs state,

Default value (“”) indicates that the field name is used as the property name without any modifications, but it can be specified to non-empty value to specify different name.

@JsonProperty over getters
This annotation can also be appliedĀ  over getter methods of properties as shown below

import com.fasterxml.jackson.annotation.JsonProperty; 

public class Child {
  
  private String dateOfBirth; 

  @JsonProperty("dob") 
  public String getDateOfBirth() {
    return dateOfBirth;
  }
}

This can also be used with value attribute.

So, we saw two ways of @JsonInclude annotation to change the name of key in json string from the name of java class property.
Hope the article was useful.