2012-03-02 23 views
8

के लिए फ़ील्ड नामकरण नीति निर्दिष्ट करना मेरे पास जैक्सन का उपयोग करके जेसन सीरियलज़िएशन/deserialization से बीन से संबंधित प्रश्न है। पहले मैंने ऐसा करने के लिए जीएसओएन का इस्तेमाल किया है, लेकिन अब मुझे एक ऐसी परियोजना का सामना करना पड़ रहा है जो पहले से ही जैक्सन पर निर्भर करता है और मैं नई निर्भरता को पेश नहीं करना चाहूंगा यदि मैं पहले से ही जो कुछ भी कर सकता हूं उसके साथ कर सकता हूं।जैक्सन

तो कल्पना मैं की तरह एक सेम है:

class ExampleBean { 
    private String firstField; 
    private String secondField; 
    // respective getters and setters 
} 

और फिर जैक्सन को यह धारावाहिक करता है:

{ 
    "firstField": "<first_field_value>", 
    "secondField": "<second_field_value>" 
} 

मैं निम्नलिखित कोड का उपयोग कर रहा से ऊपर परिणाम उपज:

ExampleBean bean; 
... 
ObjectMapper mapper = new ObjectMapper(); 
mapper.writeValue(outStream, bean); 

हालांकि मुझे निम्नलिखित क्रमिकरण प्राप्त करने के लिए (अपेक्षित) पसंद है:

{ 
    "first_field": "<first_field_value>", 
    "second_field": "<second_field_value>" 
} 

मैं जानबूझ कर मेरे उदाहरण सरलीकृत है, लेकिन मैं सेम है कि मैं क्रमानुसार करने चाहते हैं की बड़ी पदानुक्रम है और मैं निर्दिष्ट करने के लिए है कि धारावाहिक गुण हमेशा snake_style (कि अंडरस्कोर से है) और इसी सेम क्षेत्र में होना चाहिए चाहते हैं हमेशा ऊंट होना चाहिए। क्या कोई तरीका है कि मैं इस क्षेत्र/विशेषता नामकरण नीतियों को लागू कर सकता हूं और हर क्षेत्र के लिए संबंधित विशेषता को एनोटेट किए बिना उनका उपयोग कर सकता हूं?

उत्तर

11

और हाँ मैंने पाया यह (यह पता चला कि खोज के 2 घंटे के बाद मैं इसे खोजने से केवल 30 मिनट की दूरी पर किया गया था):

ObjectMapper mapper = new ObjectMapper(); 
mapper.setPropertyNamingStrategy(
    PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES); 
mapper.writeValue(outStream, bean); 

उम्मीद है कि इस बाहर बारी और कुछ भी किसी के लिए उपयोगी हो जाएगा ।

+0

ऑब्जेक्टमैपर में ऐसा कोई तरीका सेट प्रतीत नहीं होता हैप्रॉपर्टी नामकरण रणनीति ... :( – stantonk

+0

@stantonk जब मैंने अपनी टिप्पणी लिखी थी। जाहिर है यह जैक्सन 1.9 के लिए वहां था। हालांकि, मुझे हाल ही में जैक्सन में समकक्ष नहीं मिला लाइब्रेरी। कृपया, यदि आप करते हैं, तो यहां एक उत्तर लिखें ताकि लोग इसका उल्लेख कर सकें। –

+0

ने इसे समझ लिया, मेरे पास जैकसन का एक पुराना संस्करण एक पारस्परिक निर्भरता के माध्यम से शामिल किया गया था, और मेरे आईडीई ने गलत आयात किया :-)। – stantonk