diff --git a/src/main/java/org/springframework/data/elasticsearch/core/index/MappingParameters.java b/src/main/java/org/springframework/data/elasticsearch/core/index/MappingParameters.java index 20044d2f2..145f16a11 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/index/MappingParameters.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/index/MappingParameters.java @@ -239,7 +239,7 @@ public void writeTypeAndParametersTo(ObjectNode objectNode) throws IOException { if (type != FieldType.Auto) { objectNode.put(FIELD_PARAM_TYPE, type.getMappedName()); - if (type == FieldType.Date) { + if (type == FieldType.Date || type == FieldType.Date_Nanos || type == FieldType.Date_Range) { List formats = new ArrayList<>(); // built-in formats diff --git a/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderUnitTests.java b/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderUnitTests.java index b2bed3e98..63aed56c5 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderUnitTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderUnitTests.java @@ -42,6 +42,7 @@ import org.springframework.data.annotation.Transient; import org.springframework.data.elasticsearch.annotations.*; import org.springframework.data.elasticsearch.core.MappingContextBaseTests; +import org.springframework.data.elasticsearch.core.Range; import org.springframework.data.elasticsearch.core.geo.GeoPoint; import org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMappingContext; import org.springframework.data.elasticsearch.core.query.SeqNoPrimaryTerm; @@ -721,6 +722,29 @@ void shouldMapAccordingToTheAnnotatedProperties() throws JSONException { assertEquals(expected, mapping, false); } + @Test // #2102 + @DisplayName("should write date formats for date range fields") + void shouldWriteDateFormatsForDateRangeFields() throws JSONException { + + String expected = "{\n" + // + " \"properties\": {\n" + // + " \"_class\": {\n" + // + " \"type\": \"keyword\",\n" + // + " \"index\": false,\n" + // + " \"doc_values\": false\n" + // + " },\n" + // + " \"field2\": {\n" + // + " \"type\": \"date_range\",\n" + // + " \"format\": \"date\"\n" + // + " }\n" + // + " }\n" + // + "}\n"; // + + String mapping = getMappingBuilder().buildPropertyMapping(DateRangeEntity.class); + + assertEquals(expected, mapping, false); + } + @Test // #1454 @DisplayName("should write type hints when context is configured to do so") void shouldWriteTypeHintsWhenContextIsConfiguredToDoSo() throws JSONException { @@ -2045,6 +2069,31 @@ public void setField5(@Nullable LocalDateTime field5) { } } + private static class DateRangeEntity { + @Nullable + @Id private String id; + @Nullable + @Field(type = Date_Range, format = DateFormat.date) private Range field2; + + @Nullable + public String getId() { + return id; + } + + public void setId(@Nullable String id) { + this.id = id; + } + + @Nullable + public Range getField2() { + return field2; + } + + public void setField2(@Nullable Range field2) { + this.field2 = field2; + } + } + @Document(indexName = "magazine") private static class Magazine { @Id