如何使用 Java 中的 Jackson 为字段定义备用名称?
javajsonobject oriented programmingprogramming
@JsonAlias 注释可以为反序列化期间接受的属性定义一个或多个备用名称,将 JSON 数据设置为 Java 对象。但在序列化时,即从 Java 对象获取 JSON,仅使用实际的逻辑属性名称,而不是别名。
语法
@Target(value={ANNOTATION_TYPE,FIELD,METHOD,PARAMETER}) @Retention(value=RUNTIME) public @interface JsonAlias
示例
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 { ObjectMapper mapper = new ObjectMapper(); Technology tech = new Technology("Java", "Oracle"); Employee emp = new Employee(110, "Raja", tech); String jsonWriter = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(emp); System.out.println(jsonWriter); } } // Technology classclass Technology { @JsonProperty("skill") private String skill; @JsonProperty("subSkill") @JsonAlias({"sSkill", "mySubSkill"}) 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; } } // Employee classclass Employee { @JsonProperty("empId") private Integer id; @JsonProperty("empName") @JsonAlias({"ename", "myename"}) private String name; @JsonProperty("empTechnology") 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; } }
输出
{ "technology" : { "skill" : "Java", "subSkill" : "Oracle" }, "empId" : 110, "empName" : "Raja", "empTechnology" : { "skill" : "Java", "subSkill" : "Oracle" } }