Я использую Spring Boot 2.1.4 и Spring Data Jest с ElasticSearch.Первоначально я использовал Java Date для некоторых свойств со следующей аннотацией:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
Это сохраняется в ElasticSearch следующим образом:
"creationDate": "2019-04-10T14:49:05.672+0000"
Теперь я в процессе миграции сДата в LocalDateTime и ZonedDateTime.Когда данные теперь сохраняются в ElasticSearch, я сохраняю следующий атрибут:
"creationDate": {
"dayOfYear": 123,
"dayOfWeek": "FRIDAY",
"month": "MAY",
"dayOfMonth": 3,
"year": 2019,
"monthValue": 5,
"hour": 11,
"minute": 54,
"second": 12,
"nano": 238000000,
"chronology": {
"id": "ISO",
"calendarType": "iso8601"
}
},
Что мне нужно сделать, чтобы изменить его, чтобы я получил тот же формат данных ElasticSearch, что и раньше для LocalDateTime и ZonedDateTime?
Я пробовал следующее:
Настройка сопоставления объектов следующим образом:
public class CustomEntityMapper implements EntityMapper {
private final ObjectMapper objectMapper;
public CustomEntityMapper(ObjectMapper objectMapper) {
this.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);
}
}
Добавление следующего к объектуmapper:
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
Любая помощь или указатели, где я иду не так, будут оценены.