Jackson uses the field names as keys and the field value as the value during serialization. However, using the @JsonValue annotation we can customize the serialization process by specifying which method or field should be used as the serialized value.
Example 1: Applying @JsonValue annotation on a method.
Employee1.java
package com.sample.app.model;
import com.fasterxml.jackson.annotation.JsonValue;
public class Employee1 {
private int id;
private String name;
private int age;
public Employee1() {
}
public Employee1(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@JsonValue
public String serializedInfo() {
return "[ id = " + id + ", name = " + name + ", age = " + age + "]";
}
}
As you see above snippet, I annotated ‘serializedInfo’ method with @JsonValue annotation. When you serialize the Employee1 object using Jackson library, it return the value returned from serializedInfo() method.
JsonValueDemo1.java
package com.sample.app;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sample.app.model.Employee1;
public class JsonValueDemo1 {
public static void main(String[] args) throws JsonProcessingException {
Employee1 emp = new Employee1();
emp.setId(1);
emp.setName("Krishna");
emp.setAge(34);
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(emp);
System.out.println(json);
}
}
Output
"[ id = 1, name = Krishna, age = 34]"
Example 2: Applying @JsonValue annotation on a field.
Employee2.java
package com.sample.app.model;
import com.fasterxml.jackson.annotation.JsonValue;
public class Employee2 {
private int id;
private String name;
private int age;
@JsonValue
private String details;
public Employee2(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
this.details = "[ id = " + id + ", name = " + name + ", age = " + age + "]";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getDetails() {
return details;
}
}
As you see above snippet, the property 'details' is annotated with @JsonValue annotation. Now whenever you serialize the Employee2 object using Jackson, the value of the details property is returned.
JsonValueDemo2.java
package com.sample.app;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sample.app.model.Employee2;
public class JsonValueDemo2 {
public static void main(String[] args) throws JsonProcessingException {
Employee2 emp = new Employee2(1, "Krishna", 34);
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(emp);
System.out.println(json);
}
}
Output
"[ id = 1, name = Krishna, age = 34]"
No comments:
Post a Comment