SpringMVC 날짜 유형 수신 빈 값 이상 문제 해결 방법

최근 에 SpringMVC 에 contrller 류 를 쓰 고 빈 문자열 의 문자 형식 을 보 내 면 정상 적 인 상황 은 자동 으로 date 형식 으로 전 환 됩 니 다.데이터 시트 대응 유형 은 date 이기 때 문 입 니 다.
해결 방법 은 controller 류 뒤에 주 해 를 추가 하 는 것 입 니 다.

@InitBinder
  protected void initDateFormatBinder(WebDataBinder binder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
  }
위의 코드 CustomDateEditor 구조 함 수 는 true 인 자 를 전달 해 야 합 니 다.빈 문자열 로 날짜 형식 변환 을 할 수 있 음 을 표시 합 니 다.
사용자 정의 DateEditor 원본 코드

public class CustomDateEditor extends PropertyEditorSupport {
  private final DateFormat dateFormat;
  private final boolean allowEmpty;
  private final int exactDateLength;

  public CustomDateEditor(DateFormat dateFormat, boolean allowEmpty) {
    this.dateFormat = dateFormat;
    this.allowEmpty = allowEmpty;
    this.exactDateLength = -1;
  }
  ....
}
Spring Bean 류 의 마 운 트 는 BeanWrapperImpl 을 통 해 이 루어 집 니 다.간단 한 예 를 들 어 이 문 제 를 검증 할 수 있 습 니 다.DispatchInfoModel 류 는 제 테스트 클래스 입 니 다.그 안에 signDate 라 는 date 유형의 매개 변수 가 있 습 니 다.
true 로 설정 한 경우 정상적으로 실행 할 수 있 습 니 다.

public class mytest {
  public static void main(String[] args) {
    DispatchInfoModel tm = new DispatchInfoModel();
    BeanWrapper bw = new BeanWrapperImpl(tm);
    bw.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
    bw.setPropertyValue("signDate", "");
    System.out.println(tm.getSignDate());
  }
}
false 로 설 정 된 경우 이상 을 던 집 니 다:

public class mytest {
  public static void main(String[] args) {
    DispatchInfoModel tm = new DispatchInfoModel();
    BeanWrapper bw = new BeanWrapperImpl(tm);
    bw.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), false));
    bw.setPropertyValue("signDate", "");
    System.out.println(tm.getSignDate());
  }
}

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기