Jackson Annotations - @JsonRootName



Overview

@JsonRootName annotation allows to have a root node specified over the JSON. We need to enable wrap root value as well.

Example - Serialization without using @JsonRootName

JacksonTester.java

package com.tutorialspoint;

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; 
   }  
}

Output

Run the JacksonTester and verify the output −

{
  "name" : "Mark",
  "rollNo" : 1
}

Example - Serialization with @JsonRootName

JacksonTester.java

package com.tutorialspoint;

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; 
   }  
}

Output

Run the JacksonTester and verify the output −

{ 
   "student" : { 
      "name" : "Mark", 
      "rollNo" : 1 
   } 
}

Here we've enabled root node by using ObjectMapper.enable(SerializationFeature.WRAP_ROOT_VALUE). By default, it prints the root name as class name as "Student". We've customized the root name using @JsonRootName annotation.

Advertisements