Java version 8 이상에서만 사용이 가능한 api이다.
[LocalDate]
날짜 정보만 출력한다.
ex) 2024-01-15
[LocalTime]
시간 정보만 출력한다.
ex) 11:10:25
[LocalDateTime]
날짜와 시간 정보 모두 출력한다.
ex) 2020-10-12T12:32:32.222
[적용]
진행 중인 프로젝트에서 여행 시작일자, 종료일자, 체크인 시간, 체크아웃 시간 등 시간에 대한 모든 타입을 LocalDateTime으로 지정하고, MySQL타입에서는 DATETIME으로 지정했다.
여행 정보를 저장할 때 문제가 발생했다.
사용자의 가입을 처리할 때에는 LocalDateTime.now()를 사용해서 문제없이 지나갔지만, 날짜만 필요한 여행 시작일자와 종료일자에서는 LocalDateTime타입을 사용하려면 데이터를 저장할 때 년-월-일 시:분:초 모두를 필수값으로 넣어줘야 한다. MySQL Workbench에서 테스트로 SQL문을 작성해서 추가할 때에는 다음과 같이 적어도 추가되어서 헷갈렸다.
INSERT INTO trip
(user_id, name, start_date, end_date, status)
VALUES
(1, "일본여행", "2024-01-13", "2024-01-15", "국외");

당연한 결과를 예측하고 테스트를 돌리고 400 에러를 만나니 엥?
정신없이 진행하다 보니... 정신머리가 문제였다.
POST를 날려고 무한 400에러를 만나니 뭐지?? 싶었는데, JsonFormat을 yyyy-MM-dd로 해둔 상태에서는 POST 입력값에 시:분:초를 넣어주고, yyyy-MM-dd HH:mm:ss로 해둔 상태에서는 시:분:초를 안 넣어주고 있었다... 왜?????
@JsonFormat(pattern = "yyyy-MM-dd", shape = JsonFormat.Shape.STRING)
private LocalDate startDate;
{
"user_id":1,
"name":"부산 해운대",
"start_date":"2024-02-15",
"end_date":"2024-02-16",
"status":"국내"
}
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", shape = JsonFormat.Shape.STRING)
private LocalDate startDate;
{
"user_id":1,
"name":"부산 해운대",
"start_date":"2024-02-15 11:11:11",
"end_date":"2024-02-16 11:11:11",
"status":"국내"
}
이렇게 타입만 맞춰주면 된다.
테스트할 때는 정신 똑바로 챙기자.
출력형식 데이터에 맞는 데이터타입을 사용하자.
무조건 넓게 포괄한다고 좋은 게 아니다.
'프로그래밍 > TIL' 카테고리의 다른 글
[TIL] JpaAuditing 설정하고 사용하기 (0) | 2024.02.28 |
---|---|
[TIL] LocalDateTime to String, String to LocalDateTime (0) | 2024.01.31 |
[TIL] Spring Legacy - Java의 enum값을 MySQL 넣기 (0) | 2024.01.30 |
[TIL] MyBatis 그리고 ObjectMapper (0) | 2024.01.28 |
[TIL] Spring Annotation (0) | 2024.01.26 |