为什么 spring-data-elasticsearch 不使用 spring 上下文中的对象映射器

Gee*_*rts 5 spring-data kotlin spring-data-elasticsearch

我正在开发一个使用 spring-data-elasticsearch 进行数据存储的应用程序。我也在使用 kotlin 编写这个应用程序。这有一些特殊的怪癖,其中之一是 jackson 需要 jackson-module-kotlin (摆脱没有 args 构造函数的问题)。我还使用了 jackson-datatype-jsr310 模块。

Spring boot 足以从类路径中选取这些模块并自动注册它们。我还将 write-dates-as-timestamps 选项设置为 false。然而 spring-data-elasticsearch 似乎没有注意到它。我认为这是因为 DefaultEntityMapper 消息对象映射器并且不使用 spring 上下文中的对象映射器。我想知道为什么?我通过提供一些额外的配置来修复它,以确保 spring-data-elasticsearch 使用我从 spring 上下文中获得的对象映射器:

@Configuration
open class ElasticsearchConfig(val elasticsearchEntityMapper: ElasticsearchEntityMapper) {

    @Bean
    open fun elasticsearchTemplate(client: Client) = ElasticsearchTemplate(client, DefaultResultMapper(elasticsearchEntityMapper))

}

@Component
class ElasticsearchEntityMapper(val objectMapper: ObjectMapper) : EntityMapper {
    override fun mapToString(`object`: Any?) = objectMapper.writeValueAsString(`object`)

    override fun <T : Any?> mapToObject(source: String?, clazz: Class<T>?) = objectMapper.readValue(source, clazz)

}
Run Code Online (Sandbox Code Playgroud)

有没有更好/更简单的方法来确保 spring-data-elasticsearch 使用上下文中的对象映射器?