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 |
댓글