diff --git a/generators/server/templates/src/main/java/package/config/ElasticsearchConfiguration.java.ejs b/generators/server/templates/src/main/java/package/config/ElasticsearchConfiguration.java.ejs index b1b89777798d..75b92179b635 100644 --- a/generators/server/templates/src/main/java/package/config/ElasticsearchConfiguration.java.ejs +++ b/generators/server/templates/src/main/java/package/config/ElasticsearchConfiguration.java.ejs @@ -18,10 +18,13 @@ -%> package <%= packageName %>.config; -<%_ if (databaseType === 'mongodb') { _%> import org.springframework.context.annotation.Bean; -<%_ } _%> import org.springframework.context.annotation.Configuration; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; +import org.springframework.data.elasticsearch.config.ElasticsearchConfigurationSupport; +import org.springframework.data.elasticsearch.core.convert.ElasticsearchCustomConversions; <%_ if (databaseType === 'mongodb') { _%> import org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMappingContext; import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentProperty; @@ -32,8 +35,95 @@ import org.springframework.data.mapping.model.SimpleTypeHolder; import org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchPersistentEntity; <%_ } _%> +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.Arrays; + @Configuration -public class ElasticsearchConfiguration { +public class ElasticsearchConfiguration extends ElasticsearchConfigurationSupport { + + @Bean + @Override + public ElasticsearchCustomConversions elasticsearchCustomConversions() { + return new ElasticsearchCustomConversions( + Arrays.asList( + new ZonedDateTimeWritingConverter(), + new ZonedDateTimeReadingConverter(), + new InstantWritingConverter(), + new InstantReadingConverter(), + new LocalDateWritingConverter(), + new LocalDateReadingConverter() + ) + ); + } + + @WritingConverter + static class ZonedDateTimeWritingConverter implements Converter { + @Override + public String convert(ZonedDateTime source) { + if (source == null) { + return null; + } + return source.toInstant().toString(); + } + } + + @ReadingConverter + static class ZonedDateTimeReadingConverter implements Converter { + @Override + public ZonedDateTime convert(String source) { + if (source == null) { + return null; + } + return Instant.parse(source).atZone(ZoneId.systemDefault()); + } + } + + @WritingConverter + static class InstantWritingConverter implements Converter { + @Override + public String convert(Instant source) { + if (source == null) { + return null; + } + return source.toString(); + } + } + + @ReadingConverter + static class InstantReadingConverter implements Converter { + @Override + public Instant convert(String source) { + if (source == null) { + return null; + } + return Instant.parse(source); + } + } + + @WritingConverter + static class LocalDateWritingConverter implements Converter { + @Override + public String convert(LocalDate source) { + if (source == null) { + return null; + } + return source.toString(); + } + } + + @ReadingConverter + static class LocalDateReadingConverter implements Converter { + @Override + public LocalDate convert(String source) { + if (source == null) { + return null; + } + return LocalDate.parse(source); + } + } <%_ if (databaseType === 'mongodb') { _%> @Bean