https://balldev.tistory.com/29
mysql 및 maria db timezone 설정 변경 및 확인
일단 db설정하기 전에 리눅스 시간부터 확인해보겠습니다 리눅스 CLI(Command-line Interface) 환경에서는 몇 가지 명령어로 시간을 확인할 수 있습니다. date -> 2021. 09. 28. (화) 10:52:04 KST timedatectl Lo..
balldev.tistory.com
스프링에서 날짜 관련 처리를 할 경우 애러나는 것과 날짜 포맷팅에 관련해서 적어보겠습니다.
데이터베이스에서 날짜데이터를 로드 할 때 날짜형식의 string 형태로 구성하여 전달하는 경우가 있다.(2021-09-29 12:00:00) 처럼 말이다.
하지만 개발자마다 누군가는 포맷팅을 하고 누군가는 안하면 문제가 발생할 수도 있다.
클라이언트 -> 서버 request 할 경우
@DateTimeFormat을 사용한다.
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
private LocalDateTime startDate;
requestDto에 위처럼 포맷팅을 해주어야한다. (사실 @DateTimeFormat)을 안해주어도 아래처럼만 잘 보내주면 애러가 나진 않는다.)
"startDate": "2021-06-18T00:00:00",
그리고 반드시 localDateTime은 위처럼 T를 붙여야한다.
붙이지 않을 경우
Cannot deserialize value of type `java.time.LocalDateTime` from String "2021-06-18 00:00:00":
위와 같은 애러가 난다.
서버 -> 클라이언트 response 할 경우
@JsonFormat을 사용한다.
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss", timezone = "Asia/Seoul")
private LocalDateTime startDate;
결과: "startDate": "2021-06-10T11:03:00",
JsonFormat을 하면 위와 같이 pattern에 맞게 나온다.
만약 JsonFormat을 사용하지 않았을 경우에는
"startDate": "2021-06-10T09:03:00.000+00:00",
위와같이 나온다.
만약 @DateTimeFormat을 사용하거나 사용하지 않아도
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
private LocalDateTime startDate;
"startDate": "2021-06-10T09:03:00",
잘 작동하긴 한다.
결론은
Request(클라이언트 -> 서버) : @DateTimeFormat
Response(서버 -> 클라이언트) : @JsonFormat, @DateTimeFormat, 사용 X
패턴은 프론트에서 혼동되지 않게 넘겨주려면 같이 하는 사람들끼리 얘기를 해서 정하면 좋을것 같다!!
자세한 것은
https://jojoldu.tistory.com/361
SpringBoot에서 날짜 타입 JSON 변환에 대한 오해 풀기
안녕하세요? 이번 시간엔 Spring과 JSON에 대해 정리해보려고 합니다. 모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같습니다. (공부한 내용을 정리하는 Github와 세미나+책 후
jojoldu.tistory.com
향로님 블로그에 자세하게 나와있네요 ㅎㅎ
PS.
@PostConstruct
public void initApplication() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
스프링에서 기본적으로 적용하고 싶은 timezone을 설정할 수 있네요.
java -jar -Duser.timezone=Asia/Seoul ...
배포할 때 설정할 수도 있습니다.
'spring boot > spring boot' 카테고리의 다른 글
| spring boot에서 filter (0) | 2021.12.04 |
|---|---|
| spring boot 에서 argumentResolver (0) | 2021.12.04 |
| spring boot 에서 interceptor (0) | 2021.12.04 |
| spring의 dispatcher-servlet와 전체적인 흐름 (0) | 2021.10.20 |
| spring 기본 개념 - IOC, DI (0) | 2021.10.18 |