HOME
The previous tutorials have explained the conversion of Java Object to JSON using Gson API. This tutorial explains the process of excluding the attributes from the JSON using Gson API.
@Expose helps control what class attributes can be serialized or deserialized.
@Expose
is optional and offers two configuration parameters :
-
serialize
– If true, the field marked with this annotation is written out in the JSON while serializing. -
deserialize
– If true, the field marked with this annotation is deserialized from the JSON.
@Expose(serialize = false) private String lastName; @Expose (serialize = false, deserialize = false) private String emailAddress
Add the below dependency to POM.xml to use Gson API.
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency>
Let us take an example of a JSON.
{ "firstName": "Vibha", "lastName": "Singh", "salary": { "2018": 14000, "2012": 12000, "2010": 10000 }, "designation": "Manager", "emailId": [ "abc@test.com", "vibha@test.com" ] }
Let us create a table named Employee which contains the data members same as node names in the above JSON payload with @Expose annotation and their corresponding getter and setter methods.
package com.example.gson; import com.google.gson.annotations.Expose; import java.math.BigDecimal; import java.util.List; import java.util.Map; public class Employee { // private data members of POJO class @Expose(serialize = true) private String firstName; @Expose(serialize = true) private String lastName; @Expose(serialize = false) private int age; @Expose(serialize = true) private Map<String, BigDecimal> salary; @Expose() private String designation; @Expose(serialize = false) private String contactNumber; @Expose(serialize = true) private List<String> emailId; // Getter and setter methods 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; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Map<String, BigDecimal> getSalary() { return salary; } public void setSalary(Map<String, BigDecimal> salary) { this.salary = salary; } public String getDesignation() { return designation; } public void setDesignation(String designation) { this.designation = designation; } public String getContactNumber() { return contactNumber; } public void setContactNumber(String contactNumber) { this.contactNumber = contactNumber; } public List<String> getEmailId() { return emailId; } public void setEmailId(List<String> emailId) { this.emailId = emailId; } @Override public String toString() { return "(firstName: " + firstName + "," + "lastName: " + lastName + "," + "age: " + age + ", " + "salary: " + salary + "," + "designation: " + designation + ", " + "contactNumber: " + contactNumber + ", " + "emailId: " + emailId + ")"; } }
Suppose the attribute age and contactNumber in the Employee class should not serialize because it's sensitive information. Hence, we must decorate these attributes with the annotation @Expose(serialize=false):
To use @Expose annotation, we must create a Gson instance by using the GsonBuilder class and its excludeFieldsWithoutExposeAnnotation() method.
import com.google.gson.Gson; import com.google.gson.GsonBuilder; import org.junit.Test; import java.math.BigDecimal; import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class GsonExpose_Demo { @Test public void gsonExposeTest() { // Create an object of POJO class Employee employee = new Employee(); employee.setFirstName("Vibha"); employee.setLastName("Singh"); employee.setAge(30); Map<String, BigDecimal> salary = new HashMap() {{ put("2010", new BigDecimal(10000)); put("2012", new BigDecimal(12000)); put("2018", new BigDecimal(14000)); }}; employee.setSalary(salary); employee.setDesignation("Manager"); employee.setContactNumber("+919999988822"); employee.setEmailId(Arrays.asList("abc@test.com","vibha@test.com")); Gson gson = new GsonBuilder().setPrettyPrinting().excludeFieldsWithoutExposeAnnotation().create(); String employeeJsonPayload = gson.toJson(employee); System.out.println("Json :" + employeeJsonPayload); } }
The output of the above program is shown below.
We can see here that age and contactNumber are not shown in the JSON body.
We are done! Congratulations on making it through this tutorial and hope you found it useful! Happy Learning!!
No comments:
Post a Comment