날짜 데이터 요청, 응답 처리하기 - LocalDateTime Parsing
2022. 12. 26. 10:11ㆍ프로젝트/[Sleeper] 수면관리 어플리케이션
728x90
프로젝트를 진행하던 중, Controller 개발을 완료하고 테스트를 하려고 Postman으로 요청을 보냈는데..
아래와 같은 오류메세지를 마주했다.
문제 발생
아래는 내 프로젝트 소스코드 중 일부이다.
@PostMapping("/diaries")
public ResponseEntity<DiaryResponse> saveDiary(DiaryRequestForm diaryRequestForm, @SessionAttribute(SessionConst.LOGIN_USER) Object loginUser) {
LoginUser loginUser1 = (LoginUser) loginUser;
DiaryRequestForm diaryRequestForm1 = DiaryRequestForm.of(loginUser1.getUserId(), diaryRequestForm);
DiaryResponse diaryResponse = diaryService.saveDiary(diaryRequestForm1);
return new ResponseEntity<>(diaryResponse,HttpStatus.CREATED);
}
Controller에서 LocalDateTime 타입의 parameter로 받아오는 RestAPI를 만들었다.
그리고, LocalDateTime에 '2022-12-25T23:58:35Z', '2022-12-25T23:58:35', '2022-12-25T23:58:35.077714100'를 인자값으로 해서 Post 요청을 보내면 위와같은 에러가 나온다.
문제 원인
오류 메세지를 읽어보니 원인은 String 타입이 날짜 데이터(LocalDateTime)으로 타입 변환 실패이다.
문제 해결
첫 번째 해결방법은 Controller에서 요청받는 dto안의 LocalDateTime 필드를 String타입으로 바꾸는 것입니다.
다시 말해서, String으로 받은 후 Service Layer에서 변환하는 것입니다.
그러나, 이 방법은 조금 번거롭습니다...
두 번째 해결방법은 직렬화 과정을 도와주는 스프링에서 제공하는 어노테이션을 사용하는 것입니다.
@DateTimeFormat - 날짜 관련 타입의 직렬화(요청 시)
1) @ModelAttribute를 사용하여 DTO객체를 받을 때
2) @RequetsParameter로 필드별로 받을 때
@JsonFormat - 날짜 관련 직렬화 (응답 시)
이상입니다~!!
728x90