2011-08-31 21 views
103

का उपयोग कर जेएसओएन में फ़ील्ड का नाम बदलें। मैं जैक्सन का उपयोग अपने ऑब्जेक्ट को जेसन में बदलने के लिए कर रहा हूं। वस्तु 2 फ़ील्ड होते हैं:जैक्सन

@Entity 
public class City { 
    @id 
    Long id; 
    String name; 
    public String getName() { return name; } 
    public void setName(String name){ this.name = name; } 
    public Long getId() { return id; } 
    public void setName(Long id){ this.id = id; } 
} 

जब से मैं jQuery स्वत: पूर्ण सुविधा 'आईडी' मैं चाहता हूँ के साथ इस का उपयोग करने के json में 'मूल्य' और 'नाम' के रूप में प्रकट करने के लिए 'लेबल' के रूप में प्रदर्शित करना चाहते हैं । जैक्सन का दस्तावेज इस पर स्पष्ट नहीं है और मैंने प्रत्येक एनोटेशन की कोशिश की है कि मुझे लगता है कि मुझे जो भी चाहिए वह दूरस्थ रूप से ऐसा लगता है लेकिन मुझे namelabel और id के रूप में दिखाई देने के लिए value जेसन में दिखाई देने के लिए नहीं मिल सकता है।

क्या कोई जानता है कि यह कैसे करें या यदि यह संभव है?

+0

यदि आप कभी भी किसी अन्य उद्देश्य या व्यावसायिक तर्क के लिए इकाई ("शहर") का उपयोग करने जा रहे थे, तो मैं लेबल और वैल्यू के रूप में अपने JSON प्रतिनिधित्व को परिभाषित करने से बचूंगा। ओटीओएच अगर यह पूरी तरह से कॉम्बो के लिए उपयोग किया जाने वाला संदर्भ डेटा है, तो संभवतः आप अधिक होने जा रहे हैं - इनमें से सभी को कवर करने के लिए एक सामान्य इकाई (जोड़ी या विकल्प) बनाना संभव है। –

उत्तर

214

क्या आपने @JsonProperty का उपयोग करने का प्रयास किया है?

@Entity 
public class City { 
    @id 
    Long id; 
    String name; 

    @JsonProperty("label") 
    public String getName() { return name; } 

    public void setName(String name){ this.name = name; } 

    @JsonProperty("value") 
    public Long getId() { return id; } 

    public void setId(Long id){ this.id = id; } 
} 
+3

हां, मैंने कोशिश की थी, हालांकि मैं '@ जेसनप्रोपर्टी (मूल्य =" लेबल ") कर रहा था, और यह काम नहीं कर रहा था, मैंने कोशिश की है जैसा आपने सुझाव दिया है और यह काम करता है! धन्यवाद आदमी यह वास्तव में कोड को सरल बनाने में मदद करेगा। – Ali

+0

मेरे पास एक समान आवश्यकता है। बस मैं जैक्सन का उपयोग रीस्टेसी के साथ कर रहा हूं और यह काम नहीं करता है: -/अजीब! – Nikhil

+0

सत्यापित करें कि जैक्सन वास्तव में कॉन्फ़िगर किया गया प्रदाता है और कुछ और नहीं –

27

बारे में पता है कि वहाँ जैक्सन 1.x में org.codehaus.jackson.annotate.JsonProperty और जैक्सन 2. x में com.fasterxml.jackson.annotation.JsonProperty बनें जांचें कि आप किस ऑब्जेक्टमैपर का उपयोग कर रहे हैं (किस संस्करण से), और सुनिश्चित करें कि आप उचित एनोटेशन का उपयोग करें।

5

वहाँ क्षेत्र का नाम बदलने के लिए एक और विकल्प है:

Jackson MixIns

उपयोगी यदि आप तृतीय पक्ष वर्गों, जो आप टिप्पणी करने के लिए, या तुम सिर्फ जैक्सन विशिष्ट एनोटेशन के साथ वर्ग अपवित्र नहीं करना चाहती में सक्षम नहीं हैं के साथ सौदा।