spring-data-elasticsearch - Jackson无法使用全局配置进行序列化

时间:2016-03-15 22:44:09

标签: elasticsearch spring-boot jackson jhipster spring-data-elasticsearch

我正在使用ElasticSearch开发一个项目,我在与Jackson的序列化/反序列化方面遇到了一些问题。我的项目是使用JHipster创建的,因此,我使用spring将我的实体存储到数据库并在ElasticSearch中编制索引。所有实体和其他对象都可以与杰克逊(de)序列化,除非我尝试将其添加到ES。 这是我对杰克逊的全球配置:

@Configuration
public class JacksonConfiguration {

    @Bean
    Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
        SimpleModule timeModule = new JavaTimeModule();
        timeModule.addSerializer(OffsetDateTime.class, JSR310DateTimeSerializer.INSTANCE);
        timeModule.addSerializer(ZonedDateTime.class, JSR310DateTimeSerializer.INSTANCE);
        timeModule.addSerializer(LocalDateTime.class, JSR310DateTimeSerializer.INSTANCE);
        timeModule.addSerializer(Instant.class, JSR310DateTimeSerializer.INSTANCE);
        timeModule.addDeserializer(LocalDate.class, JSR310LocalDateDeserializer.INSTANCE);
        SimpleModule geoModule=new GeoModule();
        geoModule.addSerializer(Point.class, PointSerializer.INSTANCE);
        geoModule.addDeserializer(Point.class, PointDeserializer.INSTANCE);
        return new Jackson2ObjectMapperBuilder()
            .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
            .findModulesViaServiceLoader(true)
            .modulesToInstall(timeModule,geoModule);
    }
}

此配置工作正常,除非我尝试向ES添加实体,例如,永远不会调用PointSerializer。我可以看到此序列化程序为ES运行(并因此正确索引)的唯一方法是向该字段添加@JsonSerialize(using = PointSerializer.class)。为什么会发生这种情况?如何在全球范围内进行配置?

1 个答案:

答案 0 :(得分:3)

Spring Data elasticsearch似乎没有使用默认的弹簧Jackson2ObjectMapperBuilder。默认情况下,使用此配置:

https://github.com/spring-projects/spring-data-elasticsearch/blob/master/src/main/java/org/springframework/data/elasticsearch/core/DefaultEntityMapper.java

...您可以通过提供一些自定义对象映射器来覆盖,如下所述:

https://github.com/spring-projects/spring-data-elasticsearch/wiki/Custom-ObjectMapper

在这里,您当然可以直接使用Jackson ObjectMappers。有关更多详细信息,请在jhipster github repo中查看此问题:

https://github.com/jhipster/generator-jhipster/issues/2241#issuecomment-151933768