2011-09-15 11 views
5

मैं वर्तमान में जैकसन 1.7 का उपयोग किसी तृतीय पक्ष लाइब्रेरी से किसी ऑब्जेक्ट को deserialize करने का प्रयास कर रहा हूं।मेरे @ जेसन क्रिएटर और मिक्सइन एनोटेशन के साथ क्या गलत है?

ObjectMapper mapper = new ObjectMapper(); 
    mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
    mapper.getDeserializationConfig().addMixInAnnotations(com.vividsolutions.jts.geom.Point.class, MixIn.class); 

और मेरे Mixin वर्ग @JsonCreator साथ और तर्क के साथ एनोटेट प्वाइंट वस्तु वहाँ

का दृष्टांत के लिए:

तो मैं इस तरह मेरी Mixin वर्ग का उपयोग करने के लिए अपने ObjectMapper की स्थापना

public class MixIn { 
private static final GeometryFactory geometryFactory = GeometryFactoryFactory.getGeometryFactory(); 

@JsonCreator 
public static Point createPoint(@JsonProperty("x")double x, @JsonProperty("y")double y) { 
    return geometryFactory.createPoint(new Coordinate(x, y)); 
}} 

लेकिन मैं अपवाद

No suitable constructor found for type [simple type, class com.vividsolutions.jts.geom.Point]: can not instantiate from JSON object (need to add/enable type information?) 
012 हो रही है

डिबगिंग से पता चलता है कि मेरी मिक्सइन कक्षा कभी नहीं बुलाई जाती है, मैंने सोचा कि इसे ठोस वर्ग होने की आवश्यकता है लेकिन इसका एक ही परिणाम था।

मैं क्या गलत कर रहा हूं? मेरी विन्यास में क्या गलत है?

धन्यवाद

उत्तर

6

समस्या धारणा है कि मिश्रण-इन एनोटेशन जोड़ने के अलावा और कुछ के लिए इस्तेमाल किया जाएगा में है। तो आपके मामले में, 'createPoint()' के लिए एनोटेशन जोड़ा जाएगा, लेकिन जब तक कि लक्षित वर्ग में फैक्ट्री विधि (एनोटेशन जोड़ने के लिए) मिलान नहीं हो जाता है, इसका कोई प्रभाव नहीं पड़ेगा। विशेष रूप से, फिर मिश्रित-इन का उपयोग स्थैतिक फैक्ट्री विधियों को इंजेक्ट करने के लिए नहीं किया जा सकता है; वे केवल मौजूदा वर्गों के साथ एनोटेशन को जोड़ने के लिए इस्तेमाल किया जा सकता है।

+0

बहुत बहुत शुक्रिया कि समझ में आता है, मुझे लगता है कि मेरी ही एकमात्र विकल्प उन सभी अन्य विशेषताओं की जरूरत _ (लगभग 3 और अधिक जटिल वस्तुओं :() क्रमानुसार करने है _ का उपयोग कर लक्ष्य वर्ग के लिए प्रयास करें कन्स्ट्रक्टर और मिक्सइन क्लास में उनका इस्तेमाल करें। क्या मैं सही हूं? – maverick

+0

फिर से धन्यवाद, आखिरकार मैं क्षेत्र को छोड़कर विलुप्त होने के बाद समाप्त हो गया क्योंकि इसकी आवश्यकता नहीं है। – maverick

+0

यह होने या कुछ समान, कक्षाओं के आसान deserialization के लिए अविश्वसनीय रूप से सहायक होगा संशोधित नहीं किया जा सकता है। कई मामलों में सामान्य deserialization बहुत मुश्किल है। – loesak

0

@JsonIgnoreProperties({"isMilestoneView", "milestoneId"}) कक्षा के स्तर का एनोटेशन

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