Home >Java >javaTutorial >How to define alternative names for fields in Java using Jackson?
The @JsonAlias annotation can define one or more alternate names for the attributes accepted during the deserialization, setting the JSON data to a Java object. But when serializing, i.e. getting JSON from a Java object, only the actual logical property name is used instead of the alias.
<strong>@Target(value={ANNOTATION_TYPE,FIELD,METHOD,PARAMETER}) @Retention(value=RUNTIME) public @interface JsonAlias</strong>
import com.fasterxml.jackson.annotation.*; import com.fasterxml.jackson.core.*; import com.fasterxml.jackson.databind.*; import java.io.*; public class ObjectToJsonTest { public static void main(String[] args) throws JsonProcessingException { <strong>ObjectMapper </strong>mapper = new <strong>ObjectMapper()</strong>; Technology tech = new Technology("Java", "Oracle"); Employee emp = new Employee(110, "Raja", tech); String jsonWriter = mapper.<strong>writerWithDefaultPrettyPrinter().writeValueAsString(emp);</strong> System.out.println(jsonWriter); } } <strong>// Technology class </strong>class Technology { <strong> @JsonProperty("skill") </strong> private String skill; <strong> @JsonProperty("subSkill") </strong><strong> @JsonAlias({"sSkill", "mySubSkill"}) </strong> private String subSkill; public Technology(){} public Technology(String skill, String subSkill) { this.skill = skill; this.subSkill = subSkill; } public String getSkill() { return skill; } public void setSkill(String skill) { this.skill = skill; } public String getSubSkill() { return subSkill; } public void setSubSkill(String subSkill) { this.subSkill = subSkill; } } <strong>// Employee class </strong>class Employee { <strong> @JsonProperty("empId") </strong> private Integer id; <strong> @JsonProperty("empName") </strong><strong> @JsonAlias({"ename", "myename"}) </strong> private String name; <strong> @JsonProperty("empTechnology") </strong> private Technology tech; public Employee(){} public Employee(Integer id, String name, Technology tech){ this.id = id; this.name = name; this.tech = tech; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Technology getTechnology() { return tech; } public void setTechnology(Technology tech) { this.tech = tech; } }
<strong>{ "technology" : { "skill" : "Java", "subSkill" : "Oracle" }, "empId" : 110, "empName" : "Raja", "empTechnology" : { "skill" : "Java", "subSkill" : "Oracle" } }</strong>
The above is the detailed content of How to define alternative names for fields in Java using Jackson?. For more information, please follow other related articles on the PHP Chinese website!