我们什么时候可以在 Java 中调用 @JsonAnyGetter 和 @JsonAnySetter 注释?\
javajsonobject oriented programmingprogramming
@JsonAnyGetter 注释 允许使用 Map 作为我们想要序列化为 JSON 的属性的容器 ,而 @JsonAnySetter 注释 指示 Jackson 对 JSON 对象中的所有无法识别的字段调用相同的 setter 方法,这意味着所有尚未映射到 Java 对象中的属性或 setter 方法的字段。
语法
public @interface JsonAnyGetter public @interface JsonAnyGetter
示例
import java.io.*; import java.util.*; import com.fasterxml.jackson.core.*; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.annotation.*; public class JsonAnyGetterAndJsonAnySetterTest { public static void main(String args[]) throws JsonGenerationException, JsonMappingException, IOException { Employee emp1 = new Employee(); emp1.setFirstName("Adithya"); emp1.setLastName("Sai"); emp1.setEmpId(125); emp1.getAdditionalInformation().put("technology1", "Machine Learning"); emp1.getAdditionalInformation().put("technology2", "Robotics"); ObjectMapper mapper = new ObjectMapper(); String jsonStr = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(emp1); System.out.println(jsonStr); System.out.println("Deserializing JSON to Object:"); Employee emp2 = mapper.readValue(jsonStr, Employee.class); System.out.println("id : " + emp2.getEmpId()); System.out.println("firstName : " + emp2.getFirstName()); System.out.println("lastName : " + emp2.getLastName()); System.out.println("Additional information : " + emp2.getAdditionalInformation()); } } // Employee class @JsonInclude(JsonInclude.Include.NON_NULL) @JsonPropertyOrder({"firstName", "lastName", "technologies", "empId" }) class Employee { @JsonProperty("EMPLOYEE_ID") private int empId; @JsonProperty("EMPLOYEE_FIRST_NAME") private String firstName; @JsonProperty("EMPLOYEE_LAST_NAME") private String lastName; private Map<String, String> additionalInformation = new HashMap<>(); public int getEmpId() { return empId; } public void setEmpId(int empId) { this.empId = empId; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } @JsonAnyGetter public Map<String, String> getAdditionalInformation() { return additionalInformation; } public void setAdditionalInformation(Map<String, String> additionalInformation) { this.additionalInformation = additionalInformation; } @JsonAnySetter public void setAdditionalProperty(final String name, final String value) { this.additionalInformation.put(name, value); } }
输出
{ "EMPLOYEE_FIRST_NAME" : "Adithya", "EMPLOYEE_LAST_NAME" : "Sai", "EMPLOYEE_ID" : 125, "technology1" : "Machine Learning", "technology2" : "Robotics" } Deserializing JSON to Object: id : 125 firstName : Adithya lastName : Sai Additional information : {technology1=Machine Learning, technology2=Robotics}