728x90
클라이언트에서 날짜만 입력받았을 때 LocalDateTime 자료형으로 변환하기
클라이언트 측에서 날짜만 입력받았을 때, 그 기간 내의 데이터를 검색해야한다.
문제는 entity 필드는 LocalDateTime으로 저장했기 때문에 LocalDate로 받은 날짜를 변환해줘야한다는 것이다. (그 기간 내의 데이터를 검색하기 위해서 자료형을 맞춰줘야한다.)
1. 문자열을 LocalDate로 변환하기
2. LocalDate를 LocalDateTime으로 변환하기
문자열에서 LocalDateTime으로 바로 변환하지 못하는 이유는 클라이언트 측에서 날짜만 전달하기 때문이다.(yyyyMMddHHmm 으로 설정하고 '20241012'만 전달하면 길이가 부족하다는 오류가 뜬다) 따라서 날짜를 전달받은 후 startDate와 endDate의 시간을 서버에서 임의로 정해줘야한다.
@GetMapping("/my/{id}")
public ResponseEntity<MYDTO> controller_func(@PathVariable Long id,
@RequestParam("startDate") @DateTimeFormat(pattern = "yyyyMMdd") LocalDate startDate,
@RequestParam("endDate") @DateTimeFormat(pattern = "yyyyMMdd") LocalDate endDate){
return ResponseEntity.ok(myService.service_func(id, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX)));
}
- 쿼리 파라미터로 날짜를 받는다. 이때, 'yyyyMMdd' 형식의 문자열로 받는다.
- @DateTimeFormat 어노테이션을 사용하여 LocalDate로 변환한다.
- 서비스 코드의 파라미터는 LocalDateTime 자료형을 받기 때문에 atStratOfDay()와 atTime(LocalTime.MAX) 함수를 이용하여 LocalDateTime 자료형으로 바꿔준다.
- atStartOfDay() : LocalDate 형식의 변수에 시간을 00:00으로 설정하여 LocalDateTime으로 변경한다.
- atTime(LocalTime.MAX) : 시간을 그 날의 마지막으로 설정하여 LocalDateTime으로 변경한다.
이렇게 하면 클라이언트에서 날짜만 입력받아도 LocalDateTime을 사용하는 서버에서 기간 내 데이터를 검색할 수 있다.
반응형
'백엔드' 카테고리의 다른 글
[Spring Boot] Spring Security 환경에 h2 database 연결하기 (SecurityConfig 설정) (0) | 2024.11.07 |
---|---|
[Spring Boot] entity 생성 시 @Column 어노테이션을 생략한다면? (1) | 2024.10.13 |
[Spring Boot] Client가 String으로 전달한 날짜 LocalDateTime으로 저장하기 (0) | 2024.10.12 |
[SpringBoot / IntelliJ] 인텔리제이 스프링부트 실행 시 sql문 실행 (1) | 2024.09.18 |
[IntelliJ/GitHub] 인텔리제이 깃허브 연동하는 방법, 인텔리제이 코드 깃허브에 올리기 (0) | 2024.08.28 |