💻문제점 - LocalDateTime 직렬화/역직렬화
Elasticsearch 검색을 수행하던 도중 오류가 발생했다.
http://localhost:8080/api/v1/posts/suggest?keyword=통밀빵
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module"com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling
LocalDateTime의 직렬화/역직렬화 문제가 발생했다.
🔍해결
ElasticsearchConfig에 ElasticsearchClient 빈을 생성하는 코드를 추가하고, JacksonJsonpMapper에 JavaTimeModule을 등록하여 LocalDateTime을 처리할 수 있도록 설정했다.
ElasticsearchConfig
@Configuration
@EnableElasticsearchRepositories
public class ElasticsearchConfig extends ElasticsearchConfiguration {
@Value("${spring.elasticsearch.username}")
private String username;
@Value("${spring.elasticsearch.password}")
private String password;
@Value("${spring.elasticsearch.host}")
private String host;
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder()
.connectedTo(host)
.build();
}
@Bean
public ElasticsearchClient elasticsearchClient(RestClient restClient) {
ObjectMapper objectMapper =
new ObjectMapper()
.registerModule(new JavaTimeModule())
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
ElasticsearchTransport transport =
new RestClientTransport(restClient, new JacksonJsonpMapper(objectMapper));
return new ElasticsearchClient(transport);
}
}
1. ObjectMapper 생성
Jackson 라이브러리의 ObjectMapper는 JSON 데이터를 Java 객체로 변환하거나, Java 객체를 JSON으로 변환하는 데 사용된다.
- registerModule(new JavaTimeModule())
- JavaTimeModule을 등록하여 LocalDateTime과 같은 Java8 날짜/시간 타입을 처리할 수 있도록 한다.
- disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
- 날짜/시간이 타임 스탬프가 아닌 ISO-8601 문자열 형식('yyyy-MM-dd'T'HH:mm:ss.SSSZ ')으로 직렬화 되도록 한다.
2. ElasticsearchTransport 생성
RestClientTransport는 Elasticsearch 서버와의 통신을 담당한다.
RestClientTransport를 생성할 때, JacksonJsonpMapper에 objectMapper를 전달하여 LocalDateTime을 지원하도록 설정한다.
3. ElasticsearchClient
설정한 ElasticsearchTransport를 사용하여 ElasticsearchClient를 생성하고 빈으로 등록한다.
'TIL' 카테고리의 다른 글
[TIL - 20240819] Elasticsearch8.x + Kibana, Docker-compose로 구성, Credential 설정 (0) | 2024.08.19 |
---|---|
[TIL-20240813-17] Elasticsearch 자동 완성 (2) (0) | 2024.08.13 |
[TIL - 20240810~12] ElasticSearch 자동 완성 (1) (0) | 2024.08.12 |
[TIL-20240805] ElasticSearch + Spring Boot 연동 오류 해결 (0) | 2024.08.05 |
[TIL - 20240612] Swagger HTTPS 설정 (0) | 2024.06.12 |