मैं एक पीओजेओ कक्षा को क्रमबद्ध करना चाहता हूं जो मेरे नियंत्रण में नहीं है, लेकिन सुपरक्लास से आने वाली किसी भी संपत्ति को क्रमबद्ध करने से बचाना चाहता है, न कि अंतिम कक्षा से। उदाहरण:जैक्सन क्रमबद्धता: सुपरक्लास गुणों को अनदेखा करने के लिए कैसे करें
public class MyGeneratedRecord extends org.jooq.impl.UpdatableRecordImpl<...>,
example.generated.tables.interfaces.IMyGenerated {
public void setField1(...);
public Integer getField1();
public void setField2(...);
public Integer getField2();
...
}
आप उदाहरण है कि कि इस वर्ग के JOOQ द्वारा उत्पन्न होता है, और एक जटिल आधार वर्ग UpdatableRecordImpl जो भी कुछ सेम संपत्ति की तरह विधियों, जो क्रमबद्धता के दौरान समस्याओं का कारण है से विरासत से अनुमान लगा सकते हैं। इसके अलावा, मेरे पास कई समान वर्ग हैं, इसलिए मेरे सभी जेनरेट किए गए पीओजेओ के लिए एक ही समाधान को डुप्लिकेट करना टालना अच्छा होगा।
मैं अब तक संभव समाधान निम्नलिखित पाया है:
विशिष्ट क्षेत्रों इस तरह mixin तकनीक का उपयोग कर सुपर क्लास से आ रही उपेक्षा: How can I tell jackson to ignore a property for which I don't have control over the source code?
इस के साथ समस्या यह है कि अगर आधार वर्ग परिवर्तन (उदाहरण के लिए, इसमें एक नई getAnything() विधि दिखाई देती है), यह मेरे कार्यान्वयन को तोड़ सकता है।
कस्टम सीरिएलाइज़र को लागू करें और वहां समस्या को संभालें। यह मेरे लिए थोड़ा अधिक लगता है।
के रूप में संयोग से मेरे पास है एक अंतरफलक जो वास्तव में गुण मैं क्रमानुसार करने चाहते हैं, हो सकता है मैं एक @JsonSerialize Mixin कर सकते हैं का वर्णन करता है (= IMyGenerated.class के रूप में) एनोटेशन ...? क्या मैं इसे अपने उद्देश्य के लिए उपयोग कर सकता हूं?
लेकिन, देखने के शुद्ध डिजाइन बिंदु से, सबसे अच्छा जैक्सन बताते हैं कि मैं केवल अंतिम वर्ग 'गुण क्रमानुसार करने चाहते हैं, और सभी विरासत में मिला है लोगों की उपेक्षा करने में सक्षम होना होगा। क्या ऐसा करने के लिए कोई रास्ता है?
अग्रिम धन्यवाद।
जैक्सन अनुकूलन संभावनाओं के असंख्य के साथ एक अद्भुत पुस्तकालय है। यह हमेशा मुझे गूंगा महसूस करता है क्यों मुझे अपने कस्टम व्यवहार को हुक करने के लिए उचित जगह नहीं मिलती हैं। :) धन्यवाद, मुझे यही चाहिए! – Ferenc
समाधान आवश्यक परिणाम प्राप्त करता है, लेकिन यह धारावाहिक गुणों की सूची को जानना मुश्किल बनाता है या बनाता है। – jordiburgos
यह समाधान मेरे लिए काम किया। जटिल JOOQ बेस क्लास को बहुत अनदेखा करते हैं, मेरे '' 'IgnoreMarker'' कार्यान्वयन' '' वापसी m.getDeclaringClass() है getName()। ("Org.jooq") || super.hasIgnoreMarker (एम) '' ' – Nathan