1. Overview
Jackson is a prominent Java library known for converting Java objects to JSON and vice versa. At times, we might want to include specific fields in the JSON output only when they meet certain criteria, and the @JsonInclude annotation in Jackson is tailor-made for this purpose.
@JsonInclude Annotation Overview
The @JsonInclude annotation defines the criteria for including properties in the JSON output during serialization. Typically, it is used to prevent properties with null values or default states from being serialized, making the resultant JSON more concise and readable.
2. Development Steps
1. Initiate a new Maven project.
2. Add the necessary Jackson dependencies.
3. Craft the User class and utilize the @JsonInclude annotation.
4. Create a separate class for serialization logic.
5. Formulate a main class to showcase the serialization.
3. Create a Maven Project
There are different ways to create a simple Maven project:
Create a Simple Maven Project using the Command Line Interface
Create a Simple Maven Project using Eclipse IDE
Create a Simple Maven Project using IntelliJ IDEA
4. Maven Dependencies
Open the pom.xml file, and add the following Jackson data binding dependency:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
5. Code Program
Using the User Management System as a reference, let's delve in:
// User.java
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
private String username;
private String email;
private String phone;
// Suppose a user doesn't have a phone number, we don't want to serialize it.
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private String[] roles;
// Standard constructors, getters, and setters...
}
// JsonSerializer.java
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonSerializer {
public static String serializeToJson(Object object) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(object);
}
}
// MainClass.java
public class MainClass {
public static void main(String[] args) {
User user = new User();
user.setUsername("alice");
user.setEmail("alice@email.com");
// No phone and roles set for this user
try {
String json = JsonSerializer.serializeToJson(user);
System.out.println(json);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
Output:
{"username":"alice","email":"alice@email.com"}
Code Explanation:
The User class comprises fields like username, email, phone, and roles.
Using the @JsonInclude annotation, we specified that we only want non-null values to be serialized. As such, properties with null values, like phone and roles in this case, aren't included in the final JSON output.
The JsonSerializer class simplifies serialization, employing Jackson's ObjectMapper, and MainClass integrates the logic, outputting the JSON representation of the User instance.
6. Conclusion
The @JsonInclude annotation in Jackson provides an intuitive and effective means for developers to filter out undesired properties from their JSON outputs, thereby ensuring a cleaner, more precise representation of data structures in JSON format.
Comments
Post a Comment
Leave Comment