진짜 개발자
본문 바로가기

FrameWork/Spring MVC

SpringMVC - @RequestBody로 Timestamp 전달하기 (@JsonFormat : timezone 설정, 입력형식 정하기)

728x90
Spring @RequestBody Timestamp 매핑하는법과 timezone 설정

Spring @RequestBody Timestamp 매핑하는법을 알아보고, timezone을 설정하는 방법을 알아보도록 하겠습니다. 그리고 마지막으로 원하는 형식으로 timestamp을 입력받는 방법을 알아보겠습니다.

 

 

1. Controller에서 @RequestBody로 Timestamp 매핑하기

1.1 설정

우선 Timestamp를 필드로 가지는 VO객체를 생성합니다.

 

Contoller를 생성하고 방금 생성한 Data VO를 매개변수로 입력받고 @ReuqestBody를 부여합니다. 어떤식으로 시간이 맵핑되는지 확인하기 위해 console에 출력합니다.

 

 

1.2 요청

Postman을 이용하여 post 요청을 합니다. body에 2019-08-01T12:00과 같은 형식으로 데이터를 전달합니다.

 

 

1.3 결과

 

 

 

 

2. Timezone 설정하기 (@JsonFormat(timezone))

글을 잘 읽으신 분은 위의 결과가 조금 이상하다는 것을 아셨을 것입니다. 요청은 12시로 보냈지만 결과는 21시로 나타나는것이 보입니다. 이는 timezone 설정문제 때문입니다. default timezone이 한국이 아니기 때문에, 시차가 발생합니다.

 

timezone을 지정하기 위해서는 @JsonFormat어노테이션안에 timezone을 부여하면 됩니다. 나라별 timezone 목록은 search를 통해 쉽게 알아낼 수 있습니다. (한국/서울 = "Asia/Seoul")

 

다시 실행하면 원하는 시간으로 결과가 출력됩니다.

 

 

 

 

3. time 입력 형식 정하기 (@JsonFormat(pattern))

입력형식을 정하기 위해서는 @JsonFormat어노테이션 안에 pattern속성을 이용하면 됩니다.

 

위와 같은 형식으로 지정하여 입력을 받을 수도 있습니다.

 

정한 형식으로 요청을 합니다.

 

어? 그런데 결과값이 이상합니다? .이 문제가 아닙니다. 이것은 입력 format중 hh때문에 발생하는 현상입니다. hh가 12시를 기준으로 (a.m, p.m) 시간을 나타내는 format이기 때문입니다. 24시를 기준으로 시간을 나타내기 위해서는 HH를 사용하면 됩니다. 즉, hhHH로 변경하면 문제가 해결됩니다.