diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/geo/GeoJsonMultiPoint.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/geo/GeoJsonMultiPoint.java
index f42d38e0dc..c1c80b89e8 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/geo/GeoJsonMultiPoint.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/geo/GeoJsonMultiPoint.java
@@ -28,6 +28,7 @@
* {@link GeoJsonMultiPoint} is defined as list of {@link Point}s.
*
* @author Christoph Strobl
+ * @author Ivan Volzhev
* @since 1.7
* @see https://geojson.org/geojson-spec.html#multipoint
*/
@@ -40,12 +41,12 @@ public class GeoJsonMultiPoint implements GeoJson> {
/**
* Creates a new {@link GeoJsonMultiPoint} for the given {@link Point}s.
*
- * @param points points must not be {@literal null} and have at least 2 entries.
+ * @param points points must not be {@literal null} and have at least 1 entry.
*/
public GeoJsonMultiPoint(List points) {
Assert.notNull(points, "Points must not be null.");
- Assert.isTrue(points.size() >= 2, "Minimum of 2 Points required.");
+ Assert.isTrue(points.size() >= 1, "Minimum of 1 Point required.");
this.points = new ArrayList(points);
}
@@ -69,6 +70,19 @@ public GeoJsonMultiPoint(Point first, Point second, Point... others) {
this.points.addAll(Arrays.asList(others));
}
+ /**
+ * Creates a new {@link GeoJsonMultiPoint} for the given {@link Point}.
+ *
+ * @param point must not be {@literal null}.
+ */
+ public GeoJsonMultiPoint(Point point) {
+
+ Assert.notNull(point, "First point must not be null!");
+
+ this.points = new ArrayList();
+ this.points.add(point);
+ }
+
/*
* (non-Javadoc)
* @see org.springframework.data.mongodb.core.geo.GeoJson#getType()
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/geo/GeoJsonTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/geo/GeoJsonTests.java
index fa7115c098..6fa053dacd 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/geo/GeoJsonTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/geo/GeoJsonTests.java
@@ -63,6 +63,7 @@
/**
* @author Christoph Strobl
* @author Mark Paluch
+ * @author Ivan Volzhev
*/
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
@ContextConfiguration
@@ -329,6 +330,21 @@ public void shouldSaveAndRetrieveDocumentWithGeoJsonMultiPointTypeCorrectly() {
assertThat(result.geoJsonMultiPoint).isEqualTo(obj.geoJsonMultiPoint);
}
+ @Test // DATAMONGO-3776
+ public void shouldSaveAndRetrieveDocumentWithGeoJsonMultiPointTypeWithOnePointCorrectly() {
+
+ DocumentWithPropertyUsingGeoJsonType obj = new DocumentWithPropertyUsingGeoJsonType();
+ obj.id = "geoJsonMultiPoint";
+ obj.geoJsonMultiPoint = new GeoJsonMultiPoint(new Point(0, 0));
+
+ template.save(obj);
+
+ DocumentWithPropertyUsingGeoJsonType result = template.findOne(query(where("id").is(obj.id)),
+ DocumentWithPropertyUsingGeoJsonType.class);
+
+ assertThat(result.geoJsonMultiPoint).isEqualTo(obj.geoJsonMultiPoint);
+ }
+
@Test // DATAMONGO-1137
public void shouldSaveAndRetrieveDocumentWithGeoJsonMultiPolygonTypeCorrectly() {