본문으로 바로가기

 

spring에서는 DateTime에 대한 바인딩을 지원한다.

물론 PropertyEditorSupport를 통해 직접 바인딩도 가능하다.

public class StringToLocalDateTimeConverter extends PropertyEditorSupport {
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
       setValue(DateTimeUtils.dateTimeToLocalDateTime(text));
    }
}

하지만 swagger등에서도 연동하고 이쁘게 나오려면 이방식으로도 가능하지만 재정의해야한다....

 

직접 컨트롤러에서 DateTime 바인딩을 하기 위해서는

 @RequestParam(value = "startDate",required = true) @DateTimeFormat(pattern = "yyyy.MM.dd HH:mm") LocalDateTime startDate,

위처럼 @DateTimeFormat을 사용할수 있다.

 

속성으로

fallbackPatterns = {}

을 지원한다 다른포맷도 fallback 처리가능한것으로 보인다.(똑똑해!!)

 

또 다른 format으로 yyyy-MM-dd로도 가능하다

@RequestParam(value = "startDate",required = true) @DateTimeFormat(pattern = "yyyy-MM-dd",fallbackPatterns = {})

yyyy-MM-dd는 위의 포맷과 다르게 시간이 없으므로 LocalDateTime이 아닌 LocalDate로 바인딩 가능하다.

(물론 찾다보면 인터셉터나 다른 바인딩 방식으로 시간이 없는 포맷도 LocalDateTime을 바인딩 가능할지도...)

그것보단 차라리

LocalDateTime.of(startDate, LocalTime.of(0, 0))

요청에서는 time부분을 필요하지 않으므로 누락한 것이니 따로 파싱하는것도 답이다.

이상입니다.

 

 

참고 :

https://stackoverflow.com/questions/42763103/convert-string-yyyy-mm-dd-to-localdatetime