【发布时间】:2016-07-01 14:58:24
【问题描述】:
我正在使用 ElasticSearch 开发一个项目,但在使用 Jackson 进行序列化/反序列化时遇到了一些问题。我的项目是使用 JHipster 创建的,因此,我使用 spring 将我的实体存储到数据库并在 ElasticSearch 中建立索引。所有实体和其他对象都可以用杰克逊(反)序列化,除非我尝试将它添加到 ES。 这是我对 Jackson 的全局配置:
@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) 添加到该字段。为什么会发生这种情况?如何全局配置?
【问题讨论】:
标签: elasticsearch spring-boot jackson jhipster spring-data-elasticsearch