Spring @RequestBody Timestamp 매핑하는법을 알아보고, timezone을 설정하는 방법을 알아보도록 하겠습니다. 그리고 마지막으로 원하는 형식으로 timestamp을 입력받는 방법을 알아보겠습니다.
1. Controller에서 @RequestBody로 Timestamp 매핑하기
1.1 설정
xxxxxxxxxx
public class Data {
private Timestamp time;
public Timestamp getTime() {
return time;
}
public void setTime(Timestamp time) {
this.time = time;
}
}
우선 Timestamp
를 필드로 가지는 VO
객체를 생성합니다.
public class SampleController {
"/") (
public String test( Data data) {
System.out.println(data.getTime().toLocalDateTime().getHour());
return "ok";
}
}
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이 한국이 아니기 때문에, 시차가 발생합니다.
public class Data {
timezone = "Asia/Seoul") (
private Timestamp time;
public Timestamp getTime() {
return time;
}
public void setTime(Timestamp time) {
this.time = time;
}
}
timezone을 지정하기 위해서는 @JsonFormat
어노테이션안에 timezone
을 부여하면 됩니다. 나라별 timezone 목록은 search를 통해 쉽게 알아낼 수 있습니다. (한국/서울 = "Asia/Seoul")
다시 실행하면 원하는 시간으로 결과가 출력됩니다.
3. time 입력 형식 정하기 (@JsonFormat(pattern))
xxxxxxxxxx
pattern = "yyyy-MM-dd'T'hh:mm", timezone = "Asia/Seoul") (
private Timestamp time;
입력형식을 정하기 위해서는 @JsonFormat
어노테이션 안에 pattern
속성을 이용하면 됩니다.
xxxxxxxxxx
pattern = "yyyy.MM.dd'T'hh:mm", timezone = "Asia/Seoul") (
private Timestamp time;
위와 같은 형식으로 지정하여 입력을 받을 수도 있습니다.
정한 형식으로 요청을 합니다.
어? 그런데 결과값이 이상합니다? .
이 문제가 아닙니다. 이것은 입력 format중 hh
때문에 발생하는 현상입니다. hh가 12시를 기준으로 (a.m, p.m) 시간을 나타내는 format이기 때문입니다. 24시를 기준으로 시간을 나타내기 위해서는 HH를 사용하면 됩니다. 즉, hh
를 HH
로 변경하면 문제가 해결됩니다.
'FrameWork > Spring MVC' 카테고리의 다른 글
Spring MVC - form 요청을 핸들러의 매개변수로 맵핑(map form data to handler argument) (0) | 2020.06.07 |
---|---|
Spring MVC - 유연한 다중 파일업로드 핸들러 만들기 (Multipart upload) (0) | 2020.01.29 |
SpringMVC - 핸들러 메소드 9 (Exception 처리 Handler(개발자 정의)) (0) | 2019.06.22 |
SpringMVC - Spring JDBC에서 Mysql에 날짜/시간 데이터 입력 (3) | 2019.06.09 |
SpringMVC - 핸들러 메소드 - 8 (파일 다운로드 기능 구현, 리턴타입 : ResponseEntity) (0) | 2019.06.04 |