首页 > 其他 > 详细

sprint data elasticsearch rest client无法处理localdatetime格式的问题

时间:2020-02-15 19:59:01      阅读:550      评论:0      收藏:0      [点我收藏+]

在使用HighLevelRestClient的时候,如果Document对象有LocalDateTime类的属性,那么在搜索结果转换为对象的时候就会报错,无法将long型转换为localdatetime,这时因为默认的elasticsearch converters里面不提供,所以需要我们自己添加。


@Configuration
public class ESConfiguration extends AbstractElasticsearchConfiguration {

@Value("${elasticsearch.config.hosts}")
private String hosts;

@Bean
public RestHighLevelClient elasticsearchClient() {
ClientConfiguration configuration = ClientConfiguration.builder()
.connectedTo(this.hosts)
.build();

return RestClients.create(configuration).rest();
}

@Bean
@Override
public EntityMapper entityMapper() {

ElasticsearchEntityMapper entityMapper = new ElasticsearchEntityMapper(
elasticsearchMappingContext(), new DefaultConversionService()
);
entityMapper.setConversions(elasticsearchCustomConversions());

return entityMapper;
}

/**
* 默认的converter不支持long到localdatime的转换,从elasticsearch读取的时候会报错,所以在这里添加一个。
*/
@Bean
@Override
public ElasticsearchCustomConversions elasticsearchCustomConversions() {
List<Converter> converters= new ArrayList<>();
converters.add(LongToLocalDateTimeConverter.INSTANCE);
return new ElasticsearchCustomConversions(converters);
}

@ReadingConverter
static enum LongToLocalDateTimeConverter implements Converter<Long, LocalDateTime> {
INSTANCE;

private LongToLocalDateTimeConverter() {
}

public LocalDateTime convert(Long source) {
return Instant.ofEpochMilli(source).atZone(ZoneId.systemDefault()).toLocalDateTime();
}
}
}

sprint data elasticsearch rest client无法处理localdatetime格式的问题

原文:https://www.cnblogs.com/gabrialrx/p/12313126.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!