🎓 Top 15 Udemy Courses (80-90% Discount): My Udemy Courses - Ramesh Fadatare — All my Udemy courses are real-time and project oriented courses.
▶️ Subscribe to My YouTube Channel (178K+ subscribers): Java Guides on YouTube
▶️ For AI, ChatGPT, Web, Tech, and Generative AI, subscribe to another channel: Ramesh Fadatare on YouTube
1. Overview
In object-relational modeling, bidirectional relationships are common, where two entities have references to each other. When trying to serialize such entities to JSON using Jackson, there is a risk of running into infinite recursion issues. The @JsonBackReference and @JsonManagedReference annotations in Jackson provide a solution to this problem. In this article, we'll focus on the @JsonBackReference annotation, using a User Management System as our practical example.
Check out all the Java Jackson JSON tutorials and examples: 50+ Java Jackson JSON Tutorials with Examples
@JsonBackReference Annotation Overview
The @JsonBackReference annotation is used on the property that should not be serialized, i.e., the back part of the reference. This helps in avoiding infinite loops during serialization. Its counterpart, @JsonManagedReference, is used on the opposite side, indicating the property that should be serialized.
2. Development Steps
1. Set up a new Maven project.
2. Incorporate the necessary Jackson dependencies.
3. Create the entity classes, with one having the @JsonBackReference annotation.
4. Implement a main class to showcase serialization.
5. Serialize a sample object to JSON.
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
// Address.java
public class Address {
private String street;
private String city;
@JsonBackReference
private User user;
// Constructors, getters, setters...
}
// User.java
public class User {
private int userId;
private String userName;
@JsonManagedReference
private Address address;
// Constructors, getters, setters...
}
// MainApp.java
import com.fasterxml.jackson.databind.ObjectMapper;
public class MainApp {
public static void main(String[] args) {
Address addr = new Address("123 Main St", "Springfield");
User usr = new User(101, "John Doe", addr);
addr.setUser(usr);
ObjectMapper objectMapper = new ObjectMapper();
try {
String resultingJson = objectMapper.writeValueAsString(usr);
System.out.println(resultingJson);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Output:
{"userId":101,"userName":"John Doe","address":{"street":"123 Main St","city":"Springfield"}}
Code Explanation:
Here, a User is associated with an Address, and the Address has a back reference to the User. This forms a bidirectional relationship.
The @JsonBackReference annotation on the user property of the Address class indicates that this field should not be serialized. This helps in avoiding infinite loops during the serialization process.
On the other hand, the @JsonManagedReference annotation in the User class ensures that the address property is serialized.
Thus, when the User object is serialized in the MainApp class, Jackson includes the address property in the JSON output but omits the back reference to the user.
6. Conclusion
Using Jackson's @JsonBackReference annotation allows developers to manage and navigate bidirectional relationships effectively during JSON serialization. Alongside @JsonManagedReference, it ensures a balanced and recursion-free serialization of complex Java object relationships.
Check out all the Java Jackson JSON tutorials and examples: 50+ Java Jackson JSON Tutorials with Examples
My Top and Bestseller Udemy Courses. The sale is going on with a 70 - 80% discount. The discount coupon has been added to each course below:
Build REST APIs with Spring Boot 4, Spring Security 7, and JWT
[NEW] Learn Apache Maven with IntelliJ IDEA and Java 25
ChatGPT + Generative AI + Prompt Engineering for Beginners
Spring 7 and Spring Boot 4 for Beginners (Includes 8 Projects)
Available in Udemy for Business
Building Real-Time REST APIs with Spring Boot - Blog App
Available in Udemy for Business
Building Microservices with Spring Boot and Spring Cloud
Available in Udemy for Business
Java Full-Stack Developer Course with Spring Boot and React JS
Available in Udemy for Business
Build 5 Spring Boot Projects with Java: Line-by-Line Coding
Testing Spring Boot Application with JUnit and Mockito
Available in Udemy for Business
Spring Boot Thymeleaf Real-Time Web Application - Blog App
Available in Udemy for Business
Master Spring Data JPA with Hibernate
Available in Udemy for Business
Spring Boot + Apache Kafka Course - The Practical Guide
Available in Udemy for Business
Comments
Post a Comment
Leave Comment