2016-09-12 31 views
3

내 DTO에 문자열 형식의 날짜 필드가 있습니다. 내 사업체가 LocalDate와 같은 날짜를 가지고 있습니다. 현재지도에서 건너 뛰고 나중에 수동으로 명시 적으로 설정합니다 (String to Date 및 역방향).String에서 LocalDate로 변환 할 Modelmapper

자동으로 변환 할 수 있습니까? 나는 봄 콩 안에 컨버터를 사용해 봤지만 컴파일 에러를 많이 낳는다. (타입 컨버터는 매개 변수를 취하지 않고 변환 메소드를 오버라이드하지 않는다. 또한 convert()도 에러가 많이 발생한다.)

@Bean 
public ModelMapper studentModelMapper() { 
....  
    Converter<String, LocalDate> toStringDate = new AbstractConverter<String, LocalDate>() { 
     protected String convert(String source) { 
      return source == null ? null : new LocalDate(source); 
     } 
    }; 
.... 
} 

저는 modelmapper에 익숙하지 않습니다. 어떤 도움이라도 대단히 감사합니다.

DTD에 대해 LocalDate를 사용해 보았지만 문제는 내가이 엔티티를 앞 (REST 호출)에 보낼 때 JSON을 따르는 것입니다.

"dateOfBirth": { 
    "year": 1972, 
    "month": "JANUARY", 
    "monthValue": 1, 
    "dayOfMonth": 4, 
    "dayOfWeek": "TUESDAY", 
    "era": "CE", 
    "dayOfYear": 4, 
    "leapYear": true, 
    "chronology": { 
     "id": "ISO", 
     "calendarType": "iso8601" 
    } 
} 

제 프런트 엔드 개발자는 "YYYY-MM-DD"가 필요합니다.

+0

:

ModelMapper modelmapper = new ModelMapper(); Provider<LocalDate> localDateProvider = new AbstractProvider<LocalDate>() { @Override public LocalDate get() { return LocalDate.now(); } }; Converter<String, LocalDate> toStringDate = new AbstractConverter<String, LocalDate>() { @Override protected LocalDate convert(String source) { DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate localDate = LocalDate.parse(source, format); return localDate; } }; modelmapper.createTypeMap(String.class, LocalDate.class); modelmapper.addConverter(toStringDate); modelmapper.getTypeMap(String.class, LocalDate.class).setProvider(localDateProvider); 

내 테스트가 좋은 출력을 가지고? – Cyril

답변

3

LocalDate으로 변환하려면 Provider을 작성해야합니다. ModelMapper은 공용 기본 생성자가 없기 때문에 LocalDate을 인스턴스화 할 수 없습니다.

사용이 구성하고 작동합니다 : 당신은 왜 당신의 DTO들에 LOCALDATE를 사용하지 않는

String dateTest = "2000-09-27"; 
LocalDate dateConverted = modelmapper.map(dateTest, LocalDate.class); 

System.out.println(dateConverted.toString()); //Output = 2000-09-27