본문 바로가기

백엔드

[Spring Boot] Client가 String으로 전달한 날짜 LocalDateTime으로 저장하기

728x90

String으로 받은 날짜 형식을 LocalDateTime으로 변환하기

클라이언트 쪽에서 'yyyyMMddHHmm' 형식으로 날짜를 전달하는 게 편하다고 해서 기존에 LocalDateTime 자료형으로 입력받았던 date 필드에 변화를 줬다.

 

@JsonFormat을 사용하면 문자열로 받은 날짜를 LocalDateTime으로 변환할 수 있다.

다른 함수는 필요없고 dto 내에 필요한 필드 위에 @JsonFormat 어노테이션을 아래처럼 사용하면 된다.

// DTO 필드
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyyMMddHHmm", timezone = "Asia/Seoul")
private LocalDateTime date;
  • pattern 부분에는 문자열로 받은 날짜에 사용한 형식을 입력하면 된다.
  • timezone은 서울로 설정한다.

 

@DateTimeFormat 어노테이션은 안되는 이유

@DateTimeFormat도 @JsonFormat과 비슷한 역할을 하는 어노테이션인데, 프론트 쪽을 분리하여 사용할 경우 통하지 않는다. 이유는 다음과 같다.

프론트와 백엔드를 분리하여 작업할 경우 보통 JSON 형식으로 데이터를 주고받는다. 그리고 JAVA에서는 Jackson 라이브러리를 사용하여 JSON 형식으로 파싱한다. 그런데 Jackson 라이브러리는 스프링부트에 의존하지 않으므로 스프링부트에 종속된 어노테이션을 사용하면 동작하지 않는다. 따라서 스프링부트에 종속된 @DateTimeFormat 어노테이션은 동작하지 않는다. (@JsonFormat은 Jackson 라이브러리에 종속된 어노테이션이라 사용 가능하다.)

 

참고

https://woonys.tistory.com/242

반응형