/ / लोबोक के साथ कस्टम क्रमबद्ध और deserialized फ़ील्ड नाम - json, jackson, lombok

कस्टम serialized और deserialized क्षेत्र नाम लोम्बोक - जेसन, जैक्सन, लोम्बोक के साथ

क्या स्पष्ट और शायद दोनों तरीकों को लिखने के लिए अलग-अलग क्रमबद्ध / deserialized JSON फ़ील्ड नामों को स्पष्ट रूप से निर्दिष्ट करने का एक तरीका है, शायद लोबोक गेटर्स और सेटर्स का उपयोग करना?

इस के समान उदाहरणनिम्न कोड आने वाले JSON को एक अलग POJO फ़ील्ड नाम के लिए deserialized होने की अनुमति देता है। इसका कारण POJO फ़ील्ड नाम को क्रमबद्ध करना भी है:

public class PrivacySettings {
private String chiefDataOfficerName;

@JsonProperty("CDO_Name__c")
private void setChiefDataOfficerName(String chiefDataOfficerName) {
this.chiefDataOfficerName = chiefDataOfficerName;
}

@JsonProperty("chiefDataOfficerName")
private String getChiefDataOfficerName() {
return chiefDataOfficerName;
}
}

यह क्रिया लगती है, लेकिन मैं "नहीं" कर सका@Getter और @Setter के साथ काम करने के लिए इसे प्राप्त करें। मैंने देखा कि जैक्सन @JsonAlias ​​का समर्थन करता है जो शायद इस विशेष उदाहरण में मदद करेगा, लेकिन मुझे एक अलग नाम के साथ अनुक्रमित करने की भी आवश्यकता है।

इस तरह लगता है बहुत सरल होना चाहिए, कुछ इस तरह:

@Getter
@Setter
public class PrivacySettings {
@JsonSetter("CDO_Name__c")
@JsonGetter("chiefDataOfficerName")
private String chiefDataOfficerName;
}

लेकिन निश्चित रूप से यह मान्य नहीं है।

उत्तर:

उत्तर № 1 के लिए 1

मैं विशेष रूप से इस स्थिति के लिए एक गटर और एक सेटर के साथ कुछ भी गलत नहीं देखता हूं।


हालाँकि, यदि आप प्रयास करना चाहते हैं, क्योंकि v0.11.8 लोंबोक एक का समर्थन करता है प्रयोगात्मक सुविधा उत्पन्न गेटर्स और बसने के लिए एनोटेशन जोड़ने के लिए। देखें प्रलेखन:

उत्पन्न विधि पर एनोटेशन डालने के लिए, आप उपयोग कर सकते हैं onMethod=@__({@AnnotationsHere}); जनरेट किए गए सेटर विधि के एकमात्र पैरामीटर पर एनोटेशन डालना, आप उपयोग कर सकते हैं onParam=@__({@AnnotationsHere})। हालांकि सावधान रहें! यह एक प्रायोगिक विशेषता है। अधिक विवरण के लिए, प्रलेखन देखें onX सुविधा।

इस फीचर का सिंटैक्स JDK वर्जन पर निर्भर करता है। JDK 8 के लिए, आपके पास "होगा:"

public class PrivacySettings {

@Setter(onMethod_ = { @JsonSetter("CDO_Name__c") })
@Getter(onMethod_ = { @JsonGetter("chiefDataOfficerName") })
private String chiefDataOfficerName;
}

JDK 7 के लिए, वाक्यविन्यास है:

public class PrivacySettings {

@Setter(onMethod = @__({ @JsonSetter("CDO_Name__c") }))
@Getter(onMethod = @__({ @JsonGetter("chiefDataOfficerName") }))
private String chiefDataOfficerName;
}

अधिक जानकारी के लिए, की जाँच करें @Getter तथा @Setter प्रलेखन। इसे भी देखें उत्तर विवरण के लिए @__.