복붙노트

[SPRING] 날짜가 잘못된 경우 Spring mvc Joda Datetime 변환기가 실패합니다.

SPRING

날짜가 잘못된 경우 Spring mvc Joda Datetime 변환기가 실패합니다.

Joda DateTime을 포함하는 JSP에서 매핑하려는 도메인 객체가 있습니다.

public beanClass{
  private Long id;

  @DateTimeFormat
  private DateTime start;

  getters and setters...
}

Spring에 등록 된 다음 컨버터가 있습니다.

final class StringToJodaDateTimeConverter<S, T> implements Converter<String, DateTime>    {   

  private static final DateTimeFormatter fmt = DateTimeFormat.forPattern("MM/dd/yyyy");

  public DateTime convert(String in) {
     try{
        return fmt.parseDateTime(in);
     }catch(Exception e){
        throw new IllegalArgumentException("Invalid date");
     }
   }
}

Spring은 내 유효성 검사기 클래스보다 먼저 변환기를 실행하고 내 오류 메시지를 전체 오류로 채 웁니다.

java.lang.String 유형의 특성 값을 특성 sampleDate의 필수 유형 org.joda.time.DateTime으로 변환하는 데 실패했습니다. 중첩 예외는 org.springframework.core.convert.ConvertFailedException : 값 "asdf"를 java.lang.String 유형에서 org.joda.time.DateTime 유형으로 변환 할 수 없습니다. 중첩 예외가 java.lang.IllegalArgumentException : 잘못된 날짜입니다.

내가 원하는 것은 예외에서 "잘못된 날짜"메시지를받는 것입니다.

모든 것을 표시하는 대신 "잘못된 날짜"라는 예외 메시지를 표시하는 방법이 있습니까?

해결법

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

    1.특정 정보를 선언하려면 messages.properties 파일을 사용해야합니다.

    특정 정보를 선언하려면 messages.properties 파일을 사용해야합니다.

    typeMismatch.java.util.Date = Invalid date
    

    물론 spring-context.xml에이 파일에 대한 정보를 제공해야한다.

      <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
         <property name="basename" value="/WEB-INF/config/messages"/>
         <property name="defaultEncoding" value="UTF-8"/>         
        </bean>
    
  2. from https://stackoverflow.com/questions/6539884/spring-mvc-joda-datetime-converter-fail-if-invalid-date by cc-by-sa and MIT license