2012-11-30 13 views
7

मैं एक आरईएसटी सेवा से श्रेणियों और वस्तुओं का एक पेड़ खींच रहा हूँ। श्रेणियों में एक "बच्चा" विशेषता होती है जिसमें श्रेणियों और/या वस्तुओं की एक सूची होती है। उनके प्रकार "दयालु" क्षेत्र में निर्दिष्ट हैं।जैक्सन 2.1 पॉलिमॉर्फिक deserialization: pojo पर प्रकार क्षेत्र कैसे पॉप्युलेट करने के लिए?

जैक्सन का पॉलिमॉर्फिक प्रकार हैंडलिंग बहुत बढ़िया है और सभी एक अपेक्षाकृत काम कर रहे हैं, एक छोटी सी हिचकिचाहट को छोड़कर: "दयालु" क्षेत्र स्वयं ही आबादी नहीं है। क्या इस डेटा को pojos पर लाने का कोई आसान तरीका है? मुझे उम्मीद है कि कस्टम deserializers लिखना नहीं है।

यहां श्रेणी और वस्तु के लिए मूल श्रेणी है। दो उप-वर्ग कई स्केलर फ़ील्ड जोड़ते हैं, और बहुत रोचक नहीं होते हैं।

@JsonIgnoreProperties(ignoreUnknown=true) 
@JsonTypeInfo( 
    use = JsonTypeInfo.Id.NAME, 
    include = JsonTypeInfo.As.PROPERTY, 
    property = "kind", 
    defaultImpl = EntityBase.Impl.class 
    ) 
@JsonSubTypes({ 
    @Type(value = Item.class, name = "Item"), 
    @Type(value = Category.class, name = "Category") 
    }) 
public abstract class EntityBase { 
    String title; 
    String kind; 

    public void setTitle(String title) { this.title = title; } 
    public String getTitle() { return title; } 

    public void setKind(String kind) { this.kind = kind; } 
    public String getKind() { return kind; } 

    public static class Impl extends EntityBase {} 
} 

मैं इस तरह एक ObjectMapper कुछ के साथ अक्रमांकन कर रहा हूँ:

ObjectMapper mapper = new ObjectMapper(); 
Category category = mapper.readValue(inputStream, Category.class); 

मुझे लगता है कि यह इतना अप्रासंगिक है कि यह भी एक टैग के लायक नहीं है, लेकिन सिर्फ मामले में, इस में है एक एंड्रॉइड ऐप।

उत्तर

10

सामान्य रूप से, मैंने यह प्रश्न यह सुनिश्चित करने के लिए कुछ और मिनट बिताए कि यह सुनिश्चित करने के लिए कि मैंने कुछ भी स्पष्ट नहीं किया है।

मैं इसे स्पष्ट नहीं कहूंगा, लेकिन मैंने उत्तर के साथ a resolved jira ticket को ट्रैक किया। टिकट http://jackson-users.ning.com/ पर एक पोस्ट के तहत टिप्पणियों में जुड़ा हुआ था, हालांकि मैंने पोस्ट के लिंक को खो दिया है।

जेसनटाइपइन्फो एनोटेशन पर एक "दृश्यमान" विशेषता है जो यह करता है।

@JsonTypeInfo( 
    use = JsonTypeInfo.Id.NAME, 
    include = JsonTypeInfo.As.PROPERTY, 
    property = "kind", 
    visible = true,     // <----- add this 
    defaultImpl = EntityBase.Impl.class 
    ) 
public abstract class EntityBase { 
    ... 
} 

बाहर कर देता है, इस javadocs में प्रलेखित है। मैंने इसे पुराने 1.5 डॉक्स पर उत्कृष्ट एसईओ के लिए धन्यवाद दिया था (और jackson.codehaus.org और fastxml.com के बीच भ्रमित डिचोटोमी मदद नहीं करता है), लेकिन अब मैंने अपना सबक सीखा है और मैं दस्तावेज़ों को देख रहा हूं यहां: http://wiki.fasterxml.com/JacksonJavaDocs

+1

उत्कृष्ट जासूस काम! – StaxMan

+0

कुछ घंटों पहले इस सटीक समस्या में भाग गया - आपने मेरे बालों के बने रहने को बचाया! TYSM! – tbm