คำอธิบายประกอบ Jackson - คู่มือฉบับย่อ
@JsonAnyGetter อนุญาตให้เมธอด getter ส่งคืนแผนที่ซึ่งจะใช้เพื่อทำให้คุณสมบัติเพิ่มเติมของ JSON เป็นอนุกรมในลักษณะที่คล้ายคลึงกับคุณสมบัติอื่น ๆ
ตัวอย่างที่ไม่มี @JsonAnyGetter
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
try{
Student student = new Student();
student.add("Name", "Mark");
student.add("RollNo", "1");
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private Map<String, String> properties;
public Student(){
properties = new HashMap<>();
}
public Map<String, String> getProperties(){
return properties;
}
public void add(String property, String value){
properties.put(property, value);
}
}
เอาต์พุต
{
"properties" : {
"RollNo" : "1",
"Name" : "Mark"
}
}
ตัวอย่างกับ @JsonAnyGetter
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
try{
Student student = new Student();
student.add("Name", "Mark");
student.add("RollNo", "1");
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private Map<String, String> properties;
public Student(){
properties = new HashMap<>();
}
@JsonAnyGetter
public Map<String, String> getProperties(){
return properties;
}
public void add(String property, String value){
properties.put(property, value);
}
}
เอาต์พุต
{
"RollNo" : "1",
"Name" : "Mark"
}
@JsonGetter อนุญาตให้ทำเครื่องหมายวิธีการเฉพาะเป็นวิธี getter
ตัวอย่างที่ไม่มี @JsonGetter
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
try {
Student student = new Student("Mark", 1);
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private String name;
private int rollNo;
public Student(String name, int rollNo){
this.name = name;
this.rollNo = rollNo;
}
public String getStudentName(){
return name;
}
public int getRollNo(){
return rollNo;
}
}
เอาต์พุต
{
"studentName" : "Mark",
"rollNo" : 1
}
ตัวอย่างกับ @JsonGetter
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonGetter;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
try {
Student student = new Student("Mark", 1);
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private String name;
private int rollNo;
public Student(String name, int rollNo){
this.name = name;
this.rollNo = rollNo;
}
@JsonGetter
public String getStudentName(){
return name;
}
public int getRollNo(){
return rollNo;
}
}
เอาต์พุต
{
"name" : "Mark",
"rollNo" : 1
}
@JsonPropertyOrder อนุญาตให้เก็บคำสั่งเฉพาะไว้ในขณะที่ทำให้อนุกรมออบเจ็กต์ JSON
ตัวอย่างที่ไม่มี @JsonPropertyOrder
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
try {
Student student = new Student("Mark", 1);
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private String name;
private int rollNo;
public Student(String name, int rollNo) {
this.name = name;
this.rollNo = rollNo;
}
public String getName(){
return name;
}
public int getRollNo(){
return rollNo;
}
}
เอาต์พุต
{
"name" : "Mark",
"rollNo" : 1
}
ตัวอย่าง @JsonPropertyOrder
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
try {
Student student = new Student("Mark", 1);
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
@JsonPropertyOrder({ "rollNo", "name" })
class Student {
private String name;
private int rollNo;
public Student(String name, int rollNo){
this.name = name;
this.rollNo = rollNo;
}
public String getName(){
return name;
}
public int getRollNo(){
return rollNo;
}
}
เอาต์พุต
{
"name" : "Mark",
"rollNo" : 1
}
@JsonRawValue อนุญาตให้จัดลำดับข้อความโดยไม่ต้องหลบหนีหรือไม่มีการตกแต่งใด ๆ
ตัวอย่างที่ไม่มี @JsonRawValue
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
try {
Student student = new Student("Mark", 1, "{\"attr\":false}");
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private String name;
private int rollNo;
private String json;
public Student(String name, int rollNo, String json){
this.name = name;
this.rollNo = rollNo;
this.json = json;
}
public String getName(){
return name;
}
public int getRollNo(){
return rollNo;
}
public String getJson(){
return json;
}
}
เอาต์พุต
{
"name" : "Mark",
"rollNo" : 1,
"json" : {\"attr\":false}
}
ตัวอย่างกับ @JsonRawValue
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonRawValue;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
try {
Student student = new Student("Mark", 1, "{\"attr\":false}");
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private String name;
private int rollNo;
@JsonRawValue
private String json;
public Student(String name, int rollNo, String json) {
this.name = name;
this.rollNo = rollNo;
this.json = json;
}
public String getName(){
return name;
}
public int getRollNo(){
return rollNo;
}
public String getJson(){
return json;
}
}
เอาต์พุต
{
"name" : "Mark",
"rollNo" : 1,
"json" : {"attr":false}
}
@JsonValue อนุญาตให้จัดลำดับวัตถุทั้งหมดโดยใช้วิธีการเดียว
ตัวอย่าง @JsonValue
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonValue;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
try {
Student student = new Student("Mark", 1);
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private String name;
private int rollNo;
public Student(String name, int rollNo){
this.name = name;
this.rollNo = rollNo;
}
public String getName(){
return name;
}
public int getRollNo(){
return rollNo;
}
@JsonValue
public String toString(){
return "{ name : " + name + " }";
}
}
เอาต์พุต
"{ name : Mark }"
@JsonRootNameอนุญาตให้มีโหนดรูทที่ระบุบน JSON เราจำเป็นต้องเปิดใช้งานค่ารูทการตัดด้วย
ตัวอย่าง @JsonRootName
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonRootName;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
try {
Student student = new Student("Mark", 1);
mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
@JsonRootName(value = "student")
class Student {
private String name;
private int rollNo;
public Student(String name, int rollNo){
this.name = name;
this.rollNo = rollNo;
}
public String getName(){
return name;
}
public int getRollNo(){
return rollNo;
}
}
เอาต์พุต
{
"student" : {
"name" : "Mark",
"rollNo" : 1
}
}
@JsonSerialize ใช้เพื่อระบุ serializer ที่กำหนดเองเพื่อมาร์แชลอ็อบเจ็กต์ json
ตัวอย่างด้วย @JsonSerialize
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
public class JacksonTester {
public static void main(String args[]) throws ParseException {
ObjectMapper mapper = new ObjectMapper();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
try {
Student student = new Student("Mark", 1, dateFormat.parse("20-11-1984"));
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private String name;
private int rollNo;
@JsonSerialize(using = CustomDateSerializer.class)
private Date dateOfBirth;
public Student(String name, int rollNo, Date dob){
this.name = name;
this.rollNo = rollNo;
this.dateOfBirth = dob;
}
public String getName(){
return name;
}
public int getRollNo(){
return rollNo;
}
public Date getDateOfBirth(){
return dateOfBirth;
}
}
class CustomDateSerializer extends StdSerializer<Date> {
private static final long serialVersionUID = 1L;
private static SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
public CustomDateSerializer() {
this(null);
}
public CustomDateSerializer(Class<Date> t) {
super(t);
}
@Override
public void serialize(Date value,
JsonGenerator generator, SerializerProvider arg2) throws IOException {
generator.writeString(formatter.format(value));
}
}
เอาต์พุต
{
"name" : "Mark",
"rollNo" : 1,
"dateOfBirth" : "20-11-1984"
}
@JsonCreatorใช้เพื่อปรับแต่งคอนสตรัคเตอร์หรือวิธีการโรงงานที่ใช้ในการแยกส่วน เราจะใช้ @JsonProperty ด้วยเพื่อให้ได้สิ่งเดียวกัน ในตัวอย่างด้านล่างเรากำลังจับคู่ json กับรูปแบบอื่นกับคลาสของเราโดยกำหนดชื่อคุณสมบัติที่ต้องการ
ตัวอย่าง @JsonCreator
import java.io.IOException;
import java.text.ParseException;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) throws ParseException{
String json = "{\"id\":1,\"theName\":\"Mark\"}";
ObjectMapper mapper = new ObjectMapper();
try {
Student student = mapper
.readerFor(Student.class)
.readValue(json);
System.out.println(student.rollNo +", " + student.name);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
public String name;
public int rollNo;
@JsonCreator
public Student(@JsonProperty("theName") String name, @JsonProperty("id") int rollNo){
this.name = name;
this.rollNo = rollNo;
}
}
เอาต์พุต
1, Mark
@JacksonInjectถูกใช้เมื่อต้องฉีดค่าคุณสมบัติแทนการแยกวิเคราะห์จากอินพุต Json ในตัวอย่างด้านล่างเรากำลังแทรกค่าลงในวัตถุแทนที่จะแยกวิเคราะห์จาก Json
ตัวอย่าง @JacksonInject
import java.io.IOException;
import java.text.ParseException;
import com.fasterxml.jackson.annotation.JacksonInject;
import com.fasterxml.jackson.databind.InjectableValues;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) throws ParseException{
String json = "{\"name\":\"Mark\"}";
InjectableValues injectableValues = new InjectableValues.Std()
.addValue(int.class, 1);
ObjectMapper mapper = new ObjectMapper();
try {
Student student = mapper
.reader(injectableValues)
.forType(Student.class)
.readValue(json);
System.out.println(student.rollNo +", " + student.name);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
public String name;
@JacksonInject
public int rollNo;
}
เอาต์พุต
1, Mark
@JsonAnySetter อนุญาตให้เมธอด setter ใช้ Map ซึ่งจากนั้นจะใช้เพื่อ deserialize คุณสมบัติเพิ่มเติมของ JSON ในลักษณะที่คล้ายคลึงกับคุณสมบัติอื่น ๆ
ตัวอย่าง @JsonAnySetter
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"RollNo\" : \"1\",\"Name\" : \"Mark\"}";
try {
Student student = mapper.readerFor(Student.class).readValue(jsonString);
System.out.println(student.getProperties().get("Name"));
System.out.println(student.getProperties().get("RollNo"));
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private Map<String, String> properties;
public Student(){
properties = new HashMap<>();
}
public Map<String, String> getProperties(){
return properties;
}
@JsonAnySetter
public void add(String property, String value){
properties.put(property, value);
}
}
เอาต์พุต
Mark
1
@JsonSetter อนุญาตให้ทำเครื่องหมายวิธีการเฉพาะเป็น setter method
ตัวอย่าง @JsonSetter
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"rollNo\":1,\"name\":\"Marks\"}";
try {
Student student = mapper.readerFor(Student.class).readValue(jsonString);
System.out.println(student.name);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
public int rollNo;
public String name;
@JsonSetter("name")
public void setTheName(String name) {
this.name = name;
}
}
เอาต์พุต
Marks
@JsonDeserialize ใช้เพื่อระบุ deserializer ที่กำหนดเองเพื่อ unmarshall วัตถุ json
ตัวอย่าง @JsonDeserialize
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
public class JacksonTester {
public static void main(String args[]) throws ParseException{
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"Mark\",\"dateOfBirth\":\"20-12-1984\"}";
try {
Student student = mapper
.readerFor(Student.class)
.readValue(jsonString);
System.out.println(student.dateOfBirth);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
public String name;
@JsonDeserialize(using = CustomDateDeserializer.class)
public Date dateOfBirth;
}
class CustomDateDeserializer extends StdDeserializer<Date> {
private static final long serialVersionUID = 1L;
private static SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
public CustomDateDeserializer() {
this(null);
}
public CustomDateDeserializer(Class<Date> t) {
super(t);
}
@Override
public Date deserialize(JsonParser parser, DeserializationContext context)
throws IOException, JsonProcessingException {
String date = parser.getText();
try {
return formatter.parse(date);
}
catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
เอาต์พุต
Thu Dec 20 00:00:00 IST 1984
@JsonEnumDefaultValue ใช้เพื่อ deserialize ค่า enum ที่ไม่รู้จักโดยใช้ค่าเริ่มต้น
ตัวอย่าง @JsonEnumDefaultValue
import java.io.IOException;
import java.text.ParseException;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) throws ParseException{
ObjectMapper mapper = new ObjectMapper();
mapper.enable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE);
String jsonString = "\"abc\"";
try {
LETTERS value = mapper.readValue(jsonString, LETTERS.class);
System.out.println(value);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
enum LETTERS {
A, B, @JsonEnumDefaultValue UNKNOWN
}
เอาต์พุต
UNKNOWN
@JsonIgnoreProperties ใช้ในระดับคลาสเพื่อทำเครื่องหมายคุณสมบัติหรือรายการคุณสมบัติที่จะละเว้น
ตัวอย่าง - @JsonIgnoreProperties
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) {
ObjectMapper mapper = new ObjectMapper();
try {
Student student = new Student(1,11,"1ab","Mark");
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
@JsonIgnoreProperties({ "id", "systemId" })
class Student {
public int id;
public String systemId;
public int rollNo;
public String name;
Student(int id, int rollNo, String systemId, String name){
this.id = id;
this.systemId = systemId;
this.rollNo = rollNo;
this.name = name;
}
}
เอาต์พุต
{
"rollNo" : 11,
"name" : "Mark"
}
@JsonIgnore ใช้ในระดับเขตข้อมูลเพื่อทำเครื่องหมายคุณสมบัติหรือรายการคุณสมบัติที่จะละเว้น
ตัวอย่าง - @JsonIgnore
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
try{
Student student = new Student(1,11,"1ab","Mark");
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
public int id;
@JsonIgnore
public String systemId;
public int rollNo;
public String name;
Student(int id, int rollNo, String systemId, String name){
this.id = id;
this.systemId = systemId;
this.rollNo = rollNo;
this.name = name;
}
}
เอาต์พุต
{
"id" : 1,
"rollNo" : 11,
"name" : "Mark"
}
@JsonIgnoreType ถูกใช้เพื่อทำเครื่องหมายคุณสมบัติชนิดพิเศษที่จะละเว้น
ตัวอย่าง - @JsonIgnoreType
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonIgnoreType;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
try {
Student student = new Student(1,11,"1ab","Mark");
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
public int id;
@JsonIgnore
public String systemId;
public int rollNo;
public Name nameObj;
Student(int id, int rollNo, String systemId, String name){
this.id = id;
this.systemId = systemId;
this.rollNo = rollNo;
nameObj = new Name(name);
}
@JsonIgnoreType
class Name {
public String name;
Name(String name){
this.name = name;
}
}
}
เอาต์พุต
{
"id" : 1,
"systemId" : "1ab",
"rollNo" : 11
}
@JsonInclude ถูกใช้ที่คุณสมบัติการยกเว้นที่มีค่าว่าง / ว่างหรือค่าเริ่มต้น
ตัวอย่าง - @JsonInclude
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
try {
Student student = new Student(1,null);
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
@JsonInclude(JsonInclude.Include.NON_NULL)
class Student {
public int id;
public String name;
Student(int id,String name){
this.id = id;
this.name = name;
}
}
เอาต์พุต
{
"id" : 1
}
@JsonAutoDetect สามารถใช้เพื่อรวมคุณสมบัติที่ไม่สามารถเข้าถึงได้
ตัวอย่าง - @JsonAutoDetect
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
try{
Student student = new Student(1,"Mark");
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
class Student {
private int id;
private String name;
Student(int id,String name) {
this.id = id;
this.name = name;
}
}
เอาต์พุต
{
"id" : 1,
"name" : "Mark"
}
@JsonTypeInfo ใช้เพื่อระบุรายละเอียดของข้อมูลประเภทที่จะรวมอยู่ในการทำให้เป็นอนุกรมและการแยกอนุกรม
ตัวอย่าง - @JsonTypeInfo
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) throws IOException {
Shape shape = new JacksonTester.Circle("CustomCircle", 1);
String result = new ObjectMapper()
.writerWithDefaultPrettyPrinter()
.writeValueAsString(shape);
System.out.println(result);
String json = "{\"name\":\"CustomCircle\",\"radius\":1.0, \"type\":\"circle\"}";
Circle circle = new ObjectMapper().readerFor(Shape.class).readValue(json);
System.out.println(circle.name);
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include = As.PROPERTY, property = "type") @JsonSubTypes({
@JsonSubTypes.Type(value = Square.class, name = "square"),
@JsonSubTypes.Type(value = Circle.class, name = "circle")
})
static class Shape {
public String name;
Shape(String name){
this.name = name;
}
}
@JsonTypeName("square")
static class Square extends Shape {
public double length;
Square(){
this(null,0.0);
}
Square(String name, double length){
super(name);
this.length = length;
}
}
@JsonTypeName("circle")
static class Circle extends Shape {
public double radius;
Circle(){
this(null,0.0);
}
Circle(String name, double radius) {
super(name);
this.radius = radius;
}
}
}
เอาต์พุต
{
"type" : "circle",
"name" : "CustomCircle",
"radius" : 1.0
}
CustomCircle
@JsonSubTypes ใช้เพื่อระบุประเภทย่อยของประเภทที่มีคำอธิบายประกอบ
ตัวอย่าง - @JsonSubTypes
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) throws IOException{
Shape shape = new JacksonTester.Circle("CustomCircle", 1);
String result = new ObjectMapper()
.writerWithDefaultPrettyPrinter()
.writeValueAsString(shape);
System.out.println(result);
String json = "{\"name\":\"CustomCircle\",\"radius\":1.0, \"type\":\"circle\"}";
Circle circle = new ObjectMapper().readerFor(Shape.class).readValue(json);
System.out.println(circle.name);
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include = As.PROPERTY, property = "type") @JsonSubTypes({
@JsonSubTypes.Type(value = Square.class, name = "square"),
@JsonSubTypes.Type(value = Circle.class, name = "circle")
})
static class Shape {
public String name;
Shape(String name) {
this.name = name;
}
}
@JsonTypeName("square")
static class Square extends Shape {
public double length;
Square(){
this(null,0.0);
}
Square(String name, double length){
super(name);
this.length = length;
}
}
@JsonTypeName("circle")
static class Circle extends Shape {
public double radius;
Circle(){
this(null,0.0);
}
Circle(String name, double radius){
super(name);
this.radius = radius;
}
}
}
เอาต์พุต
{
"type" : "circle",
"name" : "CustomCircle",
"radius" : 1.0
}
CustomCircle
@JsonTypeName ใช้เพื่อตั้งชื่อชนิดที่จะใช้สำหรับคลาสที่มีคำอธิบายประกอบ
ตัวอย่าง - @JsonTypeName
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) throws IOException {
Shape shape = new JacksonTester.Circle("CustomCircle", 1);
String result = new ObjectMapper()
.writerWithDefaultPrettyPrinter()
.writeValueAsString(shape);
System.out.println(result);
String json = "{\"name\":\"CustomCircle\",\"radius\":1.0, \"type\":\"circle\"}";
Circle circle = new ObjectMapper().readerFor(Shape.class).readValue(json);
System.out.println(circle.name);
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include = As.PROPERTY, property = "type") @JsonSubTypes({
@JsonSubTypes.Type(value = Square.class, name = "square"),
@JsonSubTypes.Type(value = Circle.class, name = "circle")
})
static class Shape {
public String name;
Shape(String name){
this.name = name;
}
}
@JsonTypeName("square")
static class Square extends Shape {
public double length;
Square(){
this(null,0.0);
}
Square(String name, double length){
super(name);
this.length = length;
}
}
@JsonTypeName("circle")
static class Circle extends Shape {
public double radius;
Circle(){
this(null,0.0);
}
Circle(String name, double radius){
super(name);
this.radius = radius;
}
}
}
เอาต์พุต
{
"type" : "circle",
"name" : "CustomCircle",
"radius" : 1.0
}
CustomCircle
@JsonProperty ใช้เพื่อทำเครื่องหมายวิธี getter / setter ที่ไม่ได้มาตรฐานที่จะใช้กับคุณสมบัติ json
ตัวอย่าง - @JsonProperty
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) throws IOException {
ObjectMapper mapper = new ObjectMapper();
String json = "{\"id\" : 1}";
Student student = mapper.readerFor(Student.class).readValue(json);
System.out.println(student.getTheId());
}
}
class Student {
private int id;
Student(){}
Student(int id){
this.id = id;
}
@JsonProperty("id")
public int getTheId() {
return id;
}
@JsonProperty("id")
public void setTheId(int id) {
this.id = id;
}
}
เอาต์พุต
1
@JsonFormatใช้เพื่อระบุรูปแบบในขณะที่การทำให้เป็นอนุกรมหรือการทำให้เป็นอนุกรม ส่วนใหญ่จะใช้กับฟิลด์วันที่
ตัวอย่าง - @JsonFormat
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) throws IOException, ParseException {
ObjectMapper mapper = new ObjectMapper();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date date = simpleDateFormat.parse("20-12-1984");
Student student = new Student(1, date);
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
}
class Student {
public int id;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")
public Date birthDate;
Student(int id, Date birthDate){
this.id = id;
this.birthDate = birthDate;
}
}
เอาต์พุต
{
"id" : 1,
"birthDate" : "19-12-1984"
}
@JsonUnwrapped ใช้เพื่อแกะค่าของวัตถุในระหว่างการทำให้เป็นอนุกรมหรือการทำให้เป็นอนุกรม
ตัวอย่าง - @JsonUnwrapped
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) throws IOException, ParseException{
ObjectMapper mapper = new ObjectMapper();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date date = simpleDateFormat.parse("20-12-1984");
Student.Name name = new Student.Name();
name.first = "Jane";
name.last = "Doe";
Student student = new Student(1, name);
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
}
class Student {
public int id;
@JsonUnwrapped
public Name name;
Student(int id, Name name){
this.id = id;
this.name = name;
}
static class Name {
public String first;
public String last;
}
}
เอาต์พุต
{
"id" : 1,
"first" : "Jane",
"last" : "Doe"
}
@JsonView ใช้เพื่อควบคุมค่าที่จะทำให้เป็นอนุกรมหรือไม่
ตัวอย่าง - @JsonView
import java.io.IOException;
import java.text.ParseException;
import com.fasterxml.jackson.annotation.JsonView;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) throws IOException, ParseException {
ObjectMapper mapper = new ObjectMapper();
Student student = new Student(1, "Mark", 12);
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.withView(Views.Public.class)
.writeValueAsString(student);
System.out.println(jsonString);
}
}
class Student {
@JsonView(Views.Public.class)
public int id;
@JsonView(Views.Public.class)
public String name;
@JsonView(Views.Internal.class)
public int age;
Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
}
class Views {
static class Public {}
static class Internal extends Public {}
}
เอาต์พุต
{
"id" : 1,
"name" : "Mark"
}
@JsonManagedReferences และ JsonBackReferences ใช้เพื่อแสดงวัตถุที่มีความสัมพันธ์กับลูกแม่ @JsonManagedReferences ใช้เพื่ออ้างถึงออบเจ็กต์หลักและ @JsonBackReferences ใช้เพื่อทำเครื่องหมายวัตถุลูก
ตัวอย่าง - @JsonManagedReferences
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) throws IOException, ParseException {
ObjectMapper mapper = new ObjectMapper();
Student student = new Student(1, "Mark");
Book book1 = new Book(1,"Learn HTML", student);
Book book2 = new Book(1,"Learn JAVA", student);
student.addBook(book1);
student.addBook(book2);
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(book1);
System.out.println(jsonString);
}
}
class Student {
public int rollNo;
public String name;
@JsonBackReference
public List<Book> books;
Student(int rollNo, String name){
this.rollNo = rollNo;
this.name = name;
this.books = new ArrayList<Book>();
}
public void addBook(Book book){
books.add(book);
}
}
class Book {
public int id;
public String name;
Book(int id, String name, Student owner){
this.id = id;
this.name = name;
this.owner = owner;
}
@JsonManagedReference
public Student owner;
}
เอาต์พุต
{
"id" : 1,
"name" : "Learn HTML",
"owner" : {
"rollNo" : 1,
"name" : "Mark"
}
}
@JsonManagedReferences และ JsonBackReferences ใช้เพื่อแสดงวัตถุที่มีความสัมพันธ์กับลูกแม่ @JsonManagedReferences ใช้เพื่ออ้างถึงออบเจ็กต์หลักและ @JsonBackReferences ใช้เพื่อทำเครื่องหมายวัตถุลูก
ตัวอย่าง - @JsonBackReferences
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) throws IOException, ParseException {
ObjectMapper mapper = new ObjectMapper();
Student student = new Student(1, "Mark");
Book book1 = new Book(1,"Learn HTML", student);
Book book2 = new Book(1,"Learn JAVA", student);
student.addBook(book1);
student.addBook(book2);
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(book1);
System.out.println(jsonString);
}
}
class Student {
public int rollNo;
public String name;
@JsonBackReference
public List<Book> books;
Student(int rollNo, String name){
this.rollNo = rollNo;
this.name = name;
this.books = new ArrayList<Book>();
}
public void addBook(Book book){
books.add(book);
}
}
class Book {
public int id;
public String name;
Book(int id, String name, Student owner) {
this.id = id;
this.name = name;
this.owner = owner;
}
@JsonManagedReference
public Student owner;
}
เอาต์พุต
{
"id" : 1,
"name" : "Learn HTML",
"owner" : {
"rollNo" : 1,
"name" : "Mark"
}
}
@JsonIdentityInfo ถูกใช้เมื่อวัตถุมีความสัมพันธ์กับแม่ลูก @JsonIdentityInfo ใช้เพื่อระบุว่าอัตลักษณ์ของวัตถุจะถูกใช้ระหว่างการทำให้เป็นอนุกรม / การทำให้เป็นอนุกรม
ตัวอย่าง - @JsonIdentityInfo
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) throws IOException, ParseException{
ObjectMapper mapper = new ObjectMapper();
Student student = new Student(1,13, "Mark");
Book book1 = new Book(1,"Learn HTML", student);
Book book2 = new Book(2,"Learn JAVA", student);
student.addBook(book1);
student.addBook(book2);
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(book1);
System.out.println(jsonString);
}
}
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
class Student {
public int id;
public int rollNo;
public String name;
public List<Book> books;
Student(int id, int rollNo, String name){
this.id = id;
this.rollNo = rollNo;
this.name = name;
this.books = new ArrayList<Book>();
}
public void addBook(Book book){
books.add(book);
}
}
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
class Book{
public int id;
public String name;
Book(int id, String name, Student owner){
this.id = id;
this.name = name;
this.owner = owner;
}
public Student owner;
}
เอาต์พุต
{
"id" : 1,
"name" : "Learn HTML",
"owner" : {
"id" : 1,
"rollNo" : 13,
"name" : "Mark",
"books" : [
1, {
"id" : 2,
"name" : "Learn JAVA",
"owner" : 1
}
]
}
}
@JsonFilter ใช้เพื่อใช้ตัวกรองระหว่างการทำให้เป็นอนุกรม / การทำให้เป็นอนุกรมเช่นคุณสมบัติที่จะใช้หรือไม่
ตัวอย่าง - @JsonFilter
import java.io.IOException;
import java.text.ParseException;
import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
public class JacksonTester {
public static void main(String args[]) throws IOException, ParseException {
ObjectMapper mapper = new ObjectMapper();
Student student = new Student(1,13, "Mark");
FilterProvider filters = new SimpleFilterProvider() .addFilter(
"nameFilter", SimpleBeanPropertyFilter.filterOutAllExcept("name"));
String jsonString = mapper.writer(filters)
.withDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
}
@JsonFilter("nameFilter")
class Student {
public int id;
public int rollNo;
public String name;
Student(int id, int rollNo, String name) {
this.id = id;
this.rollNo = rollNo;
this.name = name;
}
}
เอาต์พุต
{
"name" : "Mark"
}
เราสามารถสร้างคำอธิบายประกอบแบบกำหนดเองได้อย่างง่ายดายโดยใช้คำอธิบายประกอบ @JacksonAnnotationsInside
ตัวอย่าง - คำอธิบายประกอบที่กำหนดเอง
import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.text.ParseException;
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) throws IOException, ParseException {
ObjectMapper mapper = new ObjectMapper();
Student student = new Student(1,13, "Mark");
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
}
@CustomAnnotation
class Student {
public int id;
public int rollNo;
public String name;
public String otherDetails;
Student(int id, int rollNo, String name){
this.id = id;
this.rollNo = rollNo;
this.name = name;
}
}
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonInclude(value = Include.NON_NULL)
@JsonPropertyOrder({ "rollNo", "id", "name" })
@interface CustomAnnotation {}
เอาต์พุต
{
"rollNo" : 13,
"id" : 1,
"name" : "Mark"
}
Mixin Annotation เป็นวิธีการเชื่อมโยงคำอธิบายประกอบโดยไม่ต้องแก้ไขคลาสเป้าหมาย ดูตัวอย่างด้านล่าง -
ตัวอย่าง - คำอธิบายประกอบแบบผสม
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonIgnoreType;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]) {
ObjectMapper mapper = new ObjectMapper();
try {
Student student = new Student(1,11,"1ab","Mark");
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
ObjectMapper mapper1 = new ObjectMapper();
mapper1.addMixIn(Name.class, MixInForIgnoreType.class);
jsonString = mapper1
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
public int id;
public String systemId;
public int rollNo;
public Name nameObj;
Student(int id, int rollNo, String systemId, String name) {
this.id = id;
this.systemId = systemId;
this.rollNo = rollNo;
nameObj = new Name(name);
}
}
class Name {
public String name;
Name(String name){
this.name = name;
}
}
@JsonIgnoreType
class MixInForIgnoreType {}
เอาต์พุต
{
"id" : 1,
"systemId" : "1ab",
"rollNo" : 11,
"nameObj" : {
"name" : "Mark"
}
}
{
"id" : 1,
"systemId" : "1ab",
"rollNo" : 11
}
เราสามารถปิดใช้งานคำอธิบายประกอบของแจ็คสันโดยใช้ฟังก์ชัน disable () ของ ObjectMapper
ตัวอย่าง - การปิดใช้งานคำอธิบายประกอบ
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonIgnoreType;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
ObjectMapper mapper = new ObjectMapper();
try{
Student student = new Student(1,11,"1ab","Mark");
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
ObjectMapper mapper1 = new ObjectMapper();
mapper1.disable(MapperFeature.USE_ANNOTATIONS);
jsonString = mapper1
.writerWithDefaultPrettyPrinter()
.writeValueAsString(student);
System.out.println(jsonString);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
public int id;
public String systemId;
public int rollNo;
public Name nameObj;
Student(int id, int rollNo, String systemId, String name){
this.id = id;
this.systemId = systemId;
this.rollNo = rollNo;
nameObj = new Name(name);
}
}
@JsonIgnoreType
class Name {
public String name;
Name(String name){
this.name = name;
}
}
เอาต์พุต
{
"id" : 1,
"systemId" : "1ab",
"rollNo" : 11
}
{
"id" : 1,
"systemId" : "1ab",
"rollNo" : 11,
"nameObj" : {
"name" : "Mark"
}
}