2015-06-12 11 views
7

यह तब होता है क्योंकि LOCALDATE नहीं है एक JavaBean (यह कोई शून्य आर्ग निर्माता है)ओरीका के साथ java.time.LocalDate फ़ील्ड को कैसे मैप करें?

इसे ठीक करने के लिए, आप एक LocalDateConverter बनाने की जरूरत:

public class LocalDateConverter extends BidirectionalConverter<LocalDate, LocalDate> { 

    @Override 
    public LocalDate convertTo(LocalDate source, Type<LocalDate> destinationType) { 
    return (source); 
    } 

    @Override 
    public LocalDate convertFrom(LocalDate source, Type<LocalDate> destinationType) { 
    return (source); 
    } 

} 

और फिर रजिस्टर यह इस लाइन को जोड़ने:

mapperFactory.getConverterFactory().registerConverter(new LocalDateConverter()); 

एक shorcut, आप के बजाय प्रदान की "PassThroughConverter" रजिस्टर कर सकते हैं के रूप में एडम मिचालिक ने सुझाव दिया ताकि Orika एक नया "LOCALDATE" instanciate करने की कोशिश नहीं कर रहा है के रूप में:

mapperFactory.getConverterFactory().registerConverter(new PassThroughConverter(LocalDate.class)); 

उत्तर

6

यह तब होता है क्योंकि LOCALDATE नहीं है एक JavaBean (यह कोई शून्य आर्ग निर्माता है)

इसे ठीक करने के लिए, आप एक LocalDateConverter बनाने की जरूरत:

public class LocalDateConverter extends BidirectionalConverter<LocalDate, LocalDate> { 

    @Override 
    public LocalDate convertTo(LocalDate source, Type<LocalDate> destinationType) { 
    return (LocalDate.from(source)); 
    } 

    @Override 
    public LocalDate convertFrom(LocalDate source, Type<LocalDate> destinationType) { 
    return (LocalDate.from(source)); 
    } 

} 

और फिर रजिस्टर में जोड़ने इस लाइन:

mapperFactory.getConverterFactory().registerConverter(new LocalDateConverter()); 
14

और भी बेहतर, के बाद से LocalDate अपरिवर्तनीय है, कोई स्रोत और लक्ष्य सेम में एक ही वस्तु का उपयोग करने में नुकसान। इस प्रकार आप अपने MapperFactory कॉन्फ़िगर कर सकते हैं:

mapperFactory.getConverterFactory().registerConverter(new PassThroughConverter(LocalDate.class)); 
+0

स्रोत और लक्ष्य सेम नहीं हैं, और मैं नहीं दिख रहा है कि कैसे एक अपरिवर्तनीय वस्तु एक नया मान क्योंकि यह "अपरिवर्तनीय" के साथ पुन: उपयोग किया जा सकता है (अपरिवर्तनीय वस्तुओं बस कर रहे हैं ऑब्जेक्ट्स जिसका राज्य (ऑब्जेक्ट का डेटा) निर्माण के बाद बदल नहीं सकता है)। – Tristan

+0

क्या आपने इसे PassThroughConverter के साथ चलाने का प्रयास किया है? जो मैं समझता हूं, आप एक नए मूल्य के साथ एक स्थानीयडेट नहीं चाहते हैं - आप लक्ष्य स्थानीयडेट को स्थानीय लोकल स्रोत के समान मूल्य चाहते हैं। चूंकि लोकलडेट अपरिवर्तनीय है, इसलिए आपको इसे प्राप्त करने के लिए एक नई लोकलडेट ऑब्जेक्ट बनाने की आवश्यकता नहीं है - आप स्रोत के लिए लक्ष्य के लिए उसी ऑब्जेक्ट का उपयोग कर सकते हैं। –

+0

mmm ठीक है, आप सही हैं, मैं अपने उपयोग के मामले के बारे में भूल गया। यदि यह काम करता है, तो आपका समाधान क्लीनर है। मुझे नहीं पता कि मैंने "वापसी स्रोत" के बजाय "वापसी (LocalDate.from (स्रोत)) क्यों लिखा" – Tristan

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

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