[Spring] LocalDateFormatter

박이레·2023년 8월 1일
0

Spring

목록 보기
11/12

HTTP는 문자열로 데이터를 전달합니다. 그래서 컨트롤러는 문자열을 기준으로 특정한 클래스의 객체로 처리하는 작업이 진행됩니다. 이때 날짜 관련 타입이 문제가 됩니다.

Client에서 '2020-02-19'와 같은 형태의 문자열을 보내면 에러가 발생합니다. Client가 보낸 날짜를 에러 없이 받기 위해서는 LocalDateFormatter가 필요합니다.


에러 상황

Controller

@GetMapping("/ex3")
public void ex3(LocalDate localDate) {
	log.info("localDate {}", localDate);   
}

Client Request

localhost:/8080/ex3?localDate=2020-02-19

Server Error Message

Client가 보낸 String(2020-02-19)을 java.time.LocalDate로 변환할 수 없다는 에러 메세지가 발생합니다.

12:22:35  WARN [org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver] Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.time.LocalDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.time.LocalDate] for value '2020-02-19'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2020-02-19]]

LocalDateFormatter

LocalDateFormmater를 작성합니다. 이를 @Bean으로 등록해줍니다.

public class LocalDateFormatter implements Formatter<LocalDate> {

    @Override
    public LocalDate parse(String text, Locale locale) throws ParseException {
        return LocalDate.parse(text, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }

    @Override
    public String print(LocalDate object, Locale locale) {
        return DateTimeFormatter.ofPattern("yyyy-MM-dd").format(object);
    }
}

결과

profile
혜화동 사는 Architect

0개의 댓글