यदि आप JSON में जावा वर्ग को परिवर्तित करने के लिए GSON का उपयोग करते हैं, तो आप उन क्षेत्रों से बच सकते हैं जो परिपत्र संदर्भ और इन्फिनिटिव लूप का कारण बनते हैं, आपको केवल एनोटेशन @ एक्सपोज करना होगा उन फ़ील्ड में जो आप JSON में दिखाना चाहते हैं, और बिना फ़ील्ड एनोटेशन @ एक्सपोज JSON में दिखाई नहीं देता है।
परिपत्र संदर्भ उदाहरण के लिए प्रकट होता है यदि हम वर्ग रूट के क्षेत्र मार्गों के साथ वर्ग उपयोगकर्ता को क्रमबद्ध करने का प्रयास करते हैं, और वर्ग रूट में उपयोगकर्ता का वर्ग उपयोगकर्ता है, तो GSON वर्ग उपयोगकर्ता को क्रमबद्ध करने का प्रयास करते हैं और जब मार्गों को क्रमबद्ध करने का प्रयास करते हैं, वर्ग रूट को क्रमबद्ध करें और कक्षा में रूट उपयोगकर्ता को क्रमबद्ध करने का प्रयास करें, और फिर से वर्ग उपयोगकर्ता को क्रमबद्ध करने का प्रयास करें, एक परिपत्र संदर्भ है जो कि इनफिनिटिव लूप को उत्तेजित करता है। मैं वर्ग उपयोगकर्ता और मार्ग दिखाता हूं जिसमें उल्लेख किया गया है।
import com.google.gson.annotations.Expose;
कक्षा उपयोगकर्ता
@Entity
@Table(name = "user")
public class User {
@Column(name = "name", nullable = false)
@Expose
private String name;
@OneToMany(mappedBy = "user", fetch = FetchType.EAGER)
@OnDelete(action = OnDeleteAction.CASCADE)
private Set<Route> routes;
@ManyToMany(fetch = FetchType.EAGER)
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinTable(name = "like_", joinColumns = @JoinColumn(name = "id_user"),
inverseJoinColumns = @JoinColumn(name = "id_route"),
foreignKey = @ForeignKey(name = ""),
inverseForeignKey = @ForeignKey(name = ""))
private Set<Route> likes;
क्लास रूट
@Entity
@Table(name = "route")
public class Route {
@ManyToOne()
@JoinColumn(nullable = false, name = "id_user", foreignKey =
@ForeignKey(name = "c"))
private User user;
इनफ़िनिटिव लूप से बचने के लिए, हम एनोटेशन @ का उपयोग करते हैं जो GSON की पेशकश करते हैं।
मैं प्रारूप JSON में वर्ग उपयोगकर्ता के साथ क्रमबद्ध का परिणाम दिखाता हूं।
{
"name": "ignacio"
}
हम देख सकते हैं कि क्षेत्र मार्ग और पसंद केवल JSON प्रारूप में मौजूद नहीं है। इस वजह से, परिपत्र संदर्भ से बचा जाता है।
यदि हम इसका उपयोग करना चाहते हैं, तो हमें एक विशिष्ट तरीके से एक वस्तु जीएसओएन बनाना होगा।
Gson converterJavaToJson = new GsonBuilder().setPrettyPrinting().excludeFieldsWithoutExposeAnnotation().create();
अंत में, हम बनाए गए GSON का उपयोग करके हाइबरनेट उपयोगकर्ता के मॉडल के जावा वर्ग को रूपांतरित करते हैं।
User user = createUserWithHibernate();
String json = converterJavaToJson.toJson(user);