bre*_*leq 2 jackson elasticsearch spring-boot jhipster spring-data-elasticsearch
我正在使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
此配置工作正常,除非我尝试将实体添加到ES中,例如,PointSerializer从不调用。我可以看到该序列化程序正在为ES运行(并因此正确地建立了索引)的唯一方法是添加@JsonSerialize(using = PointSerializer.class)到字段中。为什么会发生这种情况,如何在全局进行配置?
看来Spring Data elasticsearch并未Jackson2ObjectMapperBuilder为此使用默认的spring 。默认情况下,使用以下配置:
...,您可以通过提供一些自定义对象映射器来覆盖它,如下所述:
https://github.com/spring-projects/spring-data-elasticsearch/wiki/Custom-ObjectMapper
您当然可以在这里直接使用您的Jackson ObjectMappers。有关更多详细信息,请在jhipster github存储库中查看此问题:
https://github.com/jhipster/generator-jhipster/issues/2241#issuecomment-151933768
| 归档时间: |
|
| 查看次数: |
1962 次 |
| 最近记录: |