Jackson Annotations - @JsonSetter



Overview

@JsonSetter annotation allows a specific method to be marked as setter method.

Example - Deserialization without using @JsonSetter

JacksonTester.java

package com.tutorialspoint;

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.getRollNo() + ", " + student.getName()); 
      }
      catch (IOException e) {
         e.printStackTrace(); 
      }   
   } 
}
class Student { 
   private int rollNo; 
   private String name; 
   public void setTheName(String name) { this.name = name; } 
   public void setTheRollNo(int rollNo) {this.rollNo = rollNo;}
   public int getRollNo() {return rollNo;}
   public String getName() {return name;}
}

Output

Run the JacksonTester and verify the output −

1, Marks

Example - Deserialization with @JsonSetter

JacksonTester.java

package com.tutorialspoint;

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.getRollNo() + ", " + student.getName()); 
      }
      catch (IOException e) {
         e.printStackTrace(); 
      }   
   } 
}
class Student { 
   private int rollNo; 
   private String name; 
   @JsonSetter("name") 
   public void setTheName(String name) { this.name = name; } 
   public void setTheRollNo(int rollNo) {this.rollNo = rollNo;}
   public int getRollNo() {return rollNo;}
   public String getName() {return name;}
}

Output

Run the JacksonTester and verify the output −

1, Marks

Here we can see, even without using @JsonSetter, Jackson handles the custom setter methods. But using @JsonSetter is recommended for custom setter methods.

Advertisements