[Spring] LocalDate, LocalDateTime의 serializer와 deserializer 커스텀하기 (Json과 LocalDate 혹은 LocalDateTime 변환)

2023. 8. 7. 12:00·공부/Spring
728x90

프로젝트를 진행하는 도중 클라이언트로부터 날짜를 받아서 저장할 일이 있었다.

 

그래서 해당 날짜 필드를 사용하는 엔티티에서 날짜 필드의 타입을 LocalDate로 정해두었다.

 

이런식으로 클라이언트와 날짜를 주고 받을 때는 LocalDate, 날짜 + 시간을 주고 받을 때는 LocalDateTime을 사용한다.

 

그런데 클라이언트로부터 요청을 받을 때 JSON 형식으로 받고 응답을 내려줄 때도 JSON 형식으로 준다면 JSON 형식과 LocalDate 혹은 LocalDateTime 형식 간의 직렬화와 역직렬화를 구성해야 한다.

 

컨트롤러 및 객체 생성

우선 요청, 응답에 사용할 객체를 임시로 생성한다.

 

<ObjectEx>

@Data
@AllArgsConstructor
public class ObjectEx {
    private Date date;
    private LocalDate localDate;
    private LocalDateTime localDateTime;
}

그리고 이를 사용할 컨트롤러를 지정한다. 단순 값만 확인해 볼 예정이므로 @RestController 어노테이션을 사용하였다.

<

@RestController
public class CustomController {
    @GetMapping("/date")
    public ObjectEx hello(@RequestBody ObjectEx objectEx) {
        return objectEx;
    }
}

이제 ObjectEx 안의 LocalDate 타입과 JSON 사이의 직렬화, 역직렬화를 설정한다.

 

직렬화, 역직렬화 패턴

LocalDate를 기준으로 한번 입력받을 때는 "yyyy.MM.dd" 형식으로 입력받아서 "yyyyMMdd" 형식으로 응답해보려고 한다.

 

즉 직렬화 패턴은 "yyyyMMdd"이고 역직렬화 패턴은 "yyyy.MM.dd"로 설정하면 된다.

 

<Config>

@Configuration
public class Config {

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {

        return builder -> {
            // LocalDate 타입 직렬화, 역직렬화 패턴
            DateTimeFormatter localDateSerializeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
            DateTimeFormatter localDateDeserializeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd");
            
            // 등록
            builder.serializers(new LocalDateSerializer(localDateSerializeFormatter));
            builder.deserializers(new LocalDateDeserializer(localDateDeserializeFormatter));

        };
    }
}

 

 

 

LocalDateTime도 등록해보자.

 

"yyyyMMddHHmmss.SS" 형식으로 입력받아서 "yyyy.MM.dd HH:mm:ss.SS" 형식으로 응답받도록 설정해보자.

 

<Config>

@Configuration
public class Config {

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {

        return builder -> {
            // LocalDate 타입 직렬화, 역직렬화 패턴
            DateTimeFormatter localDateSerializeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
            DateTimeFormatter localDateDeserializeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd");

            // LocalDateTime 타입 직렬화, 역직렬화 패턴
            DateTimeFormatter localDateTimeSerializeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss.SS");
            DateTimeFormatter localDateTimeDeserializeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss.SS");

            // 등록
            builder.serializers(new LocalDateSerializer(localDateSerializeFormatter));
            builder.deserializers(new LocalDateDeserializer(localDateDeserializeFormatter));

            builder.serializers(new LocalDateTimeSerializer(localDateTimeSerializeFormatter));
            builder.deserializers(new LocalDateTimeDeserializer(localDateTimeDeserializeFormatter));

        };
    }
}

 

 

728x90

'공부 > Spring' 카테고리의 다른 글

[WebRTC] WebRTC, KMS, OpenVidu 개념  (0) 2023.10.24
[Spring][Android/Kotlin] FCM으로 안드로이드에 푸쉬 알람 보내기 (1)  (0) 2023.08.14
[Spring] 스프링 부트 Redis를 사용하여 refresh token 저장하기 (2) - docker-compose 사용법  (0) 2023.07.17
[Spring][Redis] 스프링 부트 RedisRepository 사용법  (0) 2023.07.15
[Spring][Redis] 스프링 부트에서 redis 연동 및 RedisTemplate 사용법  (0) 2023.07.14
'공부/Spring' 카테고리의 다른 글
  • [WebRTC] WebRTC, KMS, OpenVidu 개념
  • [Spring][Android/Kotlin] FCM으로 안드로이드에 푸쉬 알람 보내기 (1)
  • [Spring] 스프링 부트 Redis를 사용하여 refresh token 저장하기 (2) - docker-compose 사용법
  • [Spring][Redis] 스프링 부트 RedisRepository 사용법
웅대
웅대
알고리즘과 백엔드를 중심으로 열심히 공부 중입니다! 같이 소통하며 공부해요!
    250x250
  • 웅대
    웅대 개발 블로그
    웅대
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 백준 알고리즘
        • dp
        • 문자열
        • 정렬
        • 스택
        • 브루트 포스
        • 이진 탐색
        • 정리
        • 우선순위 큐
        • 자료구조
        • 그래프
        • 기타
        • 그리디
      • 컴퓨터 언어
        • Kotlin
        • Python
        • C#
      • 공부
        • Database
        • Android Studio
        • Algorithm
        • 컴퓨터 구조론
        • Spring
        • lombok
        • AWS
        • Network
        • OS
        • Git & GitHub
        • AI
        • Computer Vision
        • 보안
        • Nginx
        • 프론트
        • express
        • GCP
        • grokking concurrency
        • DevOps
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    AWS Lambda
    스프링 OAuth2
    스택
    parametric search
    embedding
    influxDB CLI
    nn.RNN
    RNN
    bfs
    openvidu 배포
    ChatPromptTemplate
    Merge
    ci/cd
    binary search
    code tree
    Vector Store
    푸쉬 알람
    다익스트라
    codetree
    파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
웅대
[Spring] LocalDate, LocalDateTime의 serializer와 deserializer 커스텀하기 (Json과 LocalDate 혹은 LocalDateTime 변환)
상단으로

티스토리툴바