java - फ़ील्ड के साथ-साथ गेटर/सेटर पर @ जेसनप्रोपर्टी एनोटेशन



json serialization (2)

मुझे एक निश्चित बिट कोड मिला है जिसमें गेटटर / सेटर्स पर @ जेसनप्रोपर्टी एनोटेशन है। इसका उद्देश्य यह है कि जब ऑब्जेक्ट जैक्सन लाइब्रेरी का उपयोग करके क्रमबद्ध किया जाता है, तो फ़ील्ड का वह विशिष्ट नाम होता है।

वर्तमान कोड:

private String fileName;

@JsonProperty("FILENAME")
public String getFileName()
{
    return fileName;
}

@JsonProperty("FILENAME")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

अब एक और उपकरण के लिए, मुझे जेसनप्रोपर्टी के साथ क्षेत्र को एनोटेट करने की भी आवश्यकता है। तो यह मेरा बदला कोड होगा:

@JsonProperty("FILENAME")
private String fileName;

@JsonProperty("FILENAME")
public String getFileName()
{
    return fileName;
}

@JsonProperty("FILENAME")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

क्या किसी ने भी इस पर एक ही टिप्पणी की है - क्षेत्र के साथ-साथ गेटर / सेटर्स? मैंने नेट पर चारों तरफ देखा लेकिन कुछ भी नहीं देखा।

मैंने कोड संकलित और चलाया है लेकिन मुझे यकीन नहीं है कि इससे सड़क के नीचे कोई समस्या आती है। इस पर कोई विचार?

https://ffff65535.com


कुछ परीक्षणों के आधार पर मेरे अवलोकन यह है कि जो भी नाम संपत्ति नाम से अलग है वह एक है जो प्रभावी होता है:

उदाहरण के लिए। अपने मामले में मामूली संशोधन पर विचार करें:

@JsonProperty("fileName")
private String fileName;

@JsonProperty("fileName")
public String getFileName()
{
    return fileName;
}

@JsonProperty("fileName1")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

fileName फ़ील्ड, और विधि getFileName , getFileName नाम का सही गुण नाम है और setFileName की एक अलग setFileName नाम 1 है, इस मामले में जैक्सन deserialization के बिंदु पर setFileName में setFileName नाम 1 विशेषता की तलाश करेगा और बिंदु पर fileName1 नाम 1 नामक एक विशेषता बनाएगा serialization के।

अब, आपके मामले में आ रहा है, जहां सभी तीन @ जेसनप्रोपर्टी फ़ाइल नाम के डिफ़ॉल्ट प्रॉपर्टीनाम से अलग हैं, तो यह उनमें से एक को विशेषता ( FILENAME ) के रूप में चुनता है, और तीनों में से कोई भी भिन्न होता है, तो यह एक अपवाद फेंक देता :

java.lang.IllegalStateException: Conflicting property name definitions

मौजूदा अच्छे उत्तरों के अलावा, ध्यान दें कि जैक्सन 1.9 "संपत्ति एकीकरण" जोड़कर हैंडलिंग में सुधार हुआ है, जिसका अर्थ है कि लॉजिकल प्रॉपर्टी के अंतर हिस्सों से सभी एनोटेशन संयुक्त रूप से सहज उम्मीदों का उपयोग करके संयुक्त होते हैं।

जैक्सन 1.8 और इससे पहले, केवल क्षेत्र और गेटर एनोटेशन का उपयोग किया गया था, यह निर्धारित करते समय कि सीरियलाइज (जेएसओएन लिखना) कैसे और कैसे करें; और deserialization (JSON पढ़ने) के लिए केवल और सेटटर एनोटेशन। कभी-कभी "अतिरिक्त" एनोटेशन की आवश्यकता होती है, जैसे कि गेटर और सेटर दोनों को एनोटेट करना।

जैक्सन 1.9 के साथ और इन अतिरिक्त टिप्पणियों के ऊपर की आवश्यकता नहीं है। उनको जोड़ना अभी भी संभव है; और यदि अलग-अलग नामों का उपयोग किया जाता है, तो कोई भी "विभाजन" गुण बना सकता है (एक नाम का उपयोग करके क्रमबद्ध करना, अन्य का उपयोग करके deserializing): यह कभी-कभी नामकरण के लिए उपयोगी होता है।





jackson