2013-08-04 3 views
25

मेरे सेम इस तरह दिखता है:मैं जैक्सन जावा लाइब्रेरी का उपयोग कर जावा मानचित्र को खोलने और क्रमबद्ध करने में सक्षम क्यों नहीं हूं?

class MyBean { 

    private @JsonUnwrapped HashMap<String, String> map = new HashMap<String, String>(); 

    private String name; 

    public HashMap<String, String> getMap() { 
     return map; 
    } 

    public void setMap(HashMap<String, String> map) { 
     this.map = map; 
    } 

    public String getName() { 
     return name; 
    } 

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

मैं निम्नलिखित कोड का उपयोग कर सेम serializing कर रहा हूँ जबकि:

MyBean bean = new MyBean(); 
HashMap<String, String> map = new HashMap<String, String>();; 
map.put("key1", "value1"); 
map.put("key2", "value2"); 
bean.setMap(map); 
bean.setName("suren"); 
ObjectMapper mapper = new ObjectMapper(); 
System.out.println("\n"+mapper.writeValueAsString(bean)); 

मैं हो रही है इस तरह परिणाम:

{"map":{"key2":"value2","key1":"value1"},"name":"suren"} 

लेकिन

{"key2":"value2","key1":"value1","name":"suren"} 

JacksonFeatureUnwrapping documentation प्रति उम्मीद है। मुझे अनचाहे परिणाम क्यों नहीं मिल रहे हैं?

उत्तर

55

@JsonUnwrapped नक्शे के लिए काम नहीं करता है, केवल गेटर्स और सेटर्स के साथ उचित पीओजेओ के लिए। मानचित्रों के लिए, आपको @JsonAnyGetter और @JsonAnySetter (जैक्सन संस्करण> = 1.6 में उपलब्ध) का उपयोग करना चाहिए।

आपके मामले में, इस प्रयास करें:

@JsonAnySetter 
    public void add(String key, String value) { 
     map.put(key, value); 
    } 

    @JsonAnyGetter 
    public Map<String,String> getMap() { 
     return map; 
    } 

इस तरह, आप भी सीधे गुण नक्शा करने के लिए, की तरह add('abc','xyz') मूल्य xyz साथ मानचित्र में नया कुंजी abc जोड़ देगा जोड़ सकते हैं।

2

वर्तमान में जैक्सन प्रोजेक्ट में an open issue है जो @JsonUnwrapped नक्शे पर समर्थन की अनुमति देने के लिए है। यह आगामी 2.9 रिलीज से change likely to be postponed के रूप में सूचीबद्ध है, इसलिए ऐसा लगता है कि इसे संस्करण 2.10 तक शामिल नहीं किया जाएगा।

तब तक, @ JsonAnySetter/@ JsonAnyGetter का उपयोग करने के बारे में कामकाज किसी अन्य उत्तर में प्रस्तावित करने का तरीका प्रतीत होता है।

संबंधित मुद्दे

 संबंधित मुद्दे