2015-06-16 3 views
5

मैं डाटाबेस प्रोसेसिंग में फ़ाइल के लिए वसंत बैच का उपयोग कर रहा हूं और वर्तमान में मैं PropertyEditors का उपयोग कर रहा हूं ताकि सीमित फ़ाइल में तारों को नीचे दिए गए कुछ ऑब्जेक्ट में परिवर्तित किया जा सके।BeanWrapperFieldsetMapper मैपिंग PropertyEditor प्रति फ़ील्ड आधार

Map<Class<?>, PropertyEditor> editors = new HashMap<>(); 
CustomDateEditor dateEditor = new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true); 
editors.put(Date.class, dateEditor); 

तो अगर मैं एक दिनांक फ़ील्ड मैं CustomDateEditor उपयोग कर रहा हूँ और इसके सफलतापूर्वक दिए गए फॉर्मेट दिनांक स्ट्रिंग को पार्स करने की है। हालांकि अगर मेरे पास अलग-अलग स्वरूपण के साथ एक ही फ़ाइल में कुछ और तारीख स्ट्रिंग हैं, तो मैं उन्हें पार्स करने में असमर्थ हूं। मुझे संपादकों को फ़ील्ड में जोड़ने की ज़रूरत है, तो क्या ऐसा कोई तरीका है जिससे मैं कर सकता हूं?

+0

AFAIK वसंत बैच आंतरिक> मानचित्र , PropertyEditors से कस्टम संपादकों पंजीकृत करता DataBinder जो लक्ष्य वस्तु क्षेत्रों के लिए मानचित्र में प्रदान की कक्षा बांधता बनाने के दौरान। इसलिए मुझे जो भी कह रहा है उसे करने के लिए मुझे कोई विकल्प नहीं दिख रहा है। – dShringi

+0

जैसा कि प्रश्न में ऊपर दिया गया है, मैं पहले से ही CustomDateEditor में SimpleDateFormat का उपयोग कर रहा हूं, इसलिए नए फॉर्मेटर की कोई आवश्यकता नहीं है, यह वास्तव में दिनांक प्रारूप के बारे में नहीं है, इसके बारे में मैं कई प्रारूपों का समर्थन कैसे कर सकता हूं। – dShringi

+0

क्या आप इस के लिए समाधान ढूंढ पाए थे? – James

उत्तर

0

यदि मैं सही तरीके से प्रश्न को समझता हूं, तो आप दो अलग-अलग स्तंभों को अलग-अलग दिनांक प्रारूपों (विभिन्न प्रारूपों के लिए अलग-अलग पंक्तियों) नहीं चाहते हैं। आप docs में बताए गए फ़ील्डसेट मैपर को कार्यान्वित करके ऐसा कर सकते हैं।

@Bean 
public FlatFileItemReader<Person> secondReader() { 
    FlatFileItemReader<Person> reader = new FlatFileItemReader<Person>(); 
    reader.setResource(new ClassPathResource("sample-data2.csv")); 
    reader.setLineMapper(new DefaultLineMapper<Person>() { 
     { 
      setLineTokenizer(new DelimitedLineTokenizer() { 
       { 
        setNames(new String[] { "firstName", "lastName", "fDate", "sDate" }); 
       } 
      }); 
      setFieldSetMapper(new PersonMapper()); 
     } 
    }); 
    return reader; 
} 

कार्यान्वयन:

public class PersonMapper implements FieldSetMapper<Person> { 

@Override 
public Person mapFieldSet(FieldSet fieldSet) throws BindException { 
    Person person = new Person(); 
    person.setFirstName(fieldSet.readString("firstName")); 
    person.setLastName(fieldSet.readString("lastName")); 
    person.setFirstDate(fieldSet.readDate("fDate", "MM/dd/yyyy")); 
    person.setSecondDate(fieldSet.readDate("sDate", "dd-MMM-yyyy")); 
    return person; 
} 

}

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