sprint data elasticsearch rest client無法處理localdatetime格式的問題


在使用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();
}
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM