[SPRING] 봄 데이터 Elasticsearch이 날짜 java.time.LocalDateTime와 함께 작동하도록하는 방법
SPRING봄 데이터 Elasticsearch이 날짜 java.time.LocalDateTime와 함께 작동하도록하는 방법
나는 Elasticsearch위한 스프링 데이터 지원을 사용하고 있습니다. 여기에 타임 스탬프 필드 매핑은 다음과 같습니다
@Field(type = FieldType.Date, index = FieldIndex.not_analyzed, store = true,
format = DateFormat.custom, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
private LocalDateTime timestamp;
다음과 같이이 Elasticsearch의 필드 매핑 결과 :
"timestamp":{"type":"date","store":true,"format":"yyyy-MM-dd'T'HH:mm:ss.SSSZZ"}
내가 java.util.Date를 사용하는 경우 대신 모든 것이 잘 작동합니다. 그러나,이 I Elasticsearch 전송 문서 위와 java.time.LocalDateTime로 전환 할 때, 예외가 발생. 여기에 문서 (만 간결에 대한 타임 스탬프 필드)입니다 :
"timestamp": {
"hour":7, "minute":56, "second":9, "nano":147000000, "year":2017, "month":"FEBRUARY",
"dayOfMonth":13, "dayOfWeek":"MONDAY", "dayOfYear":44, "monthValue":2, "chronology": {
"id":"ISO", "calendarType": "iso8601"
}
}
그리고 예외 :
MapperParsingException[failed to parse [timestamp]]; nested: IllegalArgumentException[unknown property [hour]];
(...)
Caused by: java.lang.IllegalArgumentException: unknown property [hour]
문서를 jsonizing 때 패턴이 여기에 무시되고있는 것 같습니다. 가능한 팁? 아니면 당신은 Spring 데이터와 함께 "내장"_timestamp 필드를 사용하는 방법을 알고 있는가?
해결법
-
==============================
1.당신의 ObjectMapper에 JavaTimeModule을 추가 https://github.com/spring-projects/spring-data-elasticsearch/wiki/Custom-ObjectMapper을 확인합니다.
당신의 ObjectMapper에 JavaTimeModule을 추가 https://github.com/spring-projects/spring-data-elasticsearch/wiki/Custom-ObjectMapper을 확인합니다.
@Configuration public class ElasticSearchConfiguration { @Bean public ElasticsearchTemplate elasticsearchTemplate(Client client) { return new ElasticsearchTemplate(client, new CustomEntityMapper()); } public static class CustomEntityMapper implements EntityMapper { private final ObjectMapper objectMapper; public CustomEntityMapper() { objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); objectMapper.registerModule(new CustomGeoModule()); objectMapper.registerModule(new JavaTimeModule()); } @Override public String mapToString(Object object) throws IOException { return objectMapper.writeValueAsString(object); } @Override public <T> T mapToObject(String source, Class<T> clazz) throws IOException { return objectMapper.readValue(source, clazz); } } }
from https://stackoverflow.com/questions/42202929/how-to-make-spring-data-elasticsearch-work-with-java-time-localdatetime-for-date by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 어떻게 ID로 봄 의존성을 주입합니까? (0) | 2019.10.03 |
---|---|
[SPRING] MDC에 대한 작업 정보를 액세스 (0) | 2019.10.03 |
[SPRING] / 활성화 봄 프로파일을 사용하여 web.xml에 필터를 해제 (0) | 2019.10.03 |
[SPRING] 봄 보안 - 페이지를 로그인 매개 변수를 전달 (0) | 2019.10.03 |
[SPRING] POJO가 인스턴스 변수로 JSON 필드를 포장 (0) | 2019.10.03 |