복붙노트

[SPRING] Spring Batch - String을 파일에서 Date로 변환하는 방법은 무엇입니까?

SPRING

Spring Batch - String을 파일에서 Date로 변환하는 방법은 무엇입니까?

필드 중 일부가 "yyyy-MM-dd"형식의 날짜 인 CSV 파일을 처리하려고합니다.하지만 CSV 파일의 String을 내 모델 클래스의 Date로 변환하려고하면 판독기가 실패합니다.

오류 :

독자를위한 XML :

http://code.google.com/p/springbatch-in-action/source/browse/trunk/sbia/ch07/src/test/resources/com/manning/sbia/ch07/test-batch-reader-context.xml?r=145

내 XML 설정 파일에서 나는 다음과 같은 빈을 가지고있다 :

  <bean id="dateEditor" class="org.springframework.beans.propertyeditors.CustomDateEditor">
    <constructor-arg>
      <bean class="java.text.SimpleDateFormat">
        <constructor-arg value="yyyy-MM-dd" />
      </bean>
    </constructor-arg>
    <constructor-arg value="true" />
  </bean>

  <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
    <property name="customEditors">
      <map>
        <entry key="java.util.Date">
          <ref local="dateEditor" />
        </entry>
      </map>
    </property>
  </bean>

내 질문은 다음과 같습니다.

최신 정보:

질문 2에 대한 답변을 얻었습니다.

XML :

  <mvc:annotation-driven conversion-service="conversionService" />

  <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="my.project.StringToDate">
                <!-- org.springframework.binding.convert.converters.StringToDate DEFAULT_PATTERN = "yyyy-MM-dd" -->
                <property name="pattern" value="yyyy-MM-dd" />
            </bean>
        </set>
    </property>
  </bean>

사용자 지정 변환기 :

package my.project;

import java.util.Date;

import org.springframework.core.convert.converter.Converter;

public class StringToDate extends org.springframework.binding.convert.converters.StringToDate implements Converter<String, Date> {

    public Date convert(String source) {

        Date date = null;

        try {
            date = (Date) convertSourceToTargetClass(getPattern(), getTargetClass());
        } catch (Exception e) {

        }

        return date;
    }

}

나는 아직도 질문 # 1에 대한 해답을 찾고있다. 즉, 변환기를 설정 한 후에도 배치 작업 중에 BindException이 발생합니다. 이 포럼 스레드에서 내 코드가 변환을 수행 한 것 같습니다.

스택 추적 :

Caused by: org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 errors
Field error in object 'target' on field 'datetimeInactive': rejected value [2011-04-27]; codes [typeMismatch.target.datetimeInactive,typeMismatch.datetimeInactive,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [target.datetimeInactive,datetimeInactive]; arguments []; default message [datetimeInactive]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'datetimeInactive'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property 'datetimeInactive': no matching editors or conversion strategy found]
Field error in object 'target' on field 'datetimeActive': rejected value [2011-04-27]; codes [typeMismatch.target.datetimeActive,typeMismatch.datetimeActive,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [target.datetimeActive,datetimeActive]; arguments []; default message [datetimeActive]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'datetimeActive'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property 'datetimeActive': no matching editors or conversion strategy found]
    at org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper.mapFieldSet(BeanWrapperFieldSetMapper.java:186)
    at org.springframework.batch.item.file.mapping.DefaultLineMapper.mapLine(DefaultLineMapper.java:42)
    at org.springframework.batch.item.file.FlatFileItemReader.doRead(FlatFileItemReader.java:179)
    ... 45 more

해결법

  1. ==============================

    1.포럼 참조는 응용 프로그램 컨텍스트를 작성하고 bean을 구성하는 동안 유형 변환을위한 것입니다.

    포럼 참조는 응용 프로그램 컨텍스트를 작성하고 bean을 구성하는 동안 유형 변환을위한 것입니다.

    BeanWrapperFieldSetMapper에 대한 JavaDoc 살펴보기

    CustomDateEditor를 Mapper에 직접 삽입해야 함을 의미합니다.

  2. from https://stackoverflow.com/questions/9059481/spring-batch-how-to-convert-string-from-file-to-date by cc-by-sa and MIT license