如何使Spring Data Elasticsearch与java.time.LocalDateTime一起使用日期
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使Spring Data Elasticsearch与java.time.LocalDateTime一起使用日期,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2146字,纯文字阅读大概需要4分钟。
内容图文
![如何使Spring Data Elasticsearch与java.time.LocalDateTime一起使用日期](/upload/InfoBanner/zyjiaocheng/727/9410dab1e0e544329c92bde57cd25f28.jpg)
我正在使用Spring Data支持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时,一切正常.但是,当我如上所述切换到java.time.LocalDateTime时,发送到Elasticsearch的文档会导致异常.这是文档(仅为简洁起见,时间戳字段):
"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 Data中使用“内置”_timestamp字段?
解决方法:
检查https://github.com/spring-projects/spring-data-elasticsearch/wiki/Custom-ObjectMapper以将JavaTimeModule添加到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);
}
}
}
内容总结
以上是互联网集市为您收集整理的如何使Spring Data Elasticsearch与java.time.LocalDateTime一起使用日期全部内容,希望文章能够帮你解决如何使Spring Data Elasticsearch与java.time.LocalDateTime一起使用日期所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。