diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/geo/GeoJsonModule.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/geo/GeoJsonModule.java index 498317a80..0a57247c9 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/geo/GeoJsonModule.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/geo/GeoJsonModule.java @@ -21,10 +21,16 @@ import java.util.Collections; import java.util.List; import org.springframework.data.geo.Point; +import org.springframework.data.mongodb.core.geo.GeoJsonSerializersModule.GeoJsonLineStringSerializer; +import org.springframework.data.mongodb.core.geo.GeoJsonSerializersModule.GeoJsonMultiLineStringSerializer; +import org.springframework.data.mongodb.core.geo.GeoJsonSerializersModule.GeoJsonMultiPointSerializer; +import org.springframework.data.mongodb.core.geo.GeoJsonSerializersModule.GeoJsonMultiPolygonSerializer; +import org.springframework.data.mongodb.core.geo.GeoJsonSerializersModule.GeoJsonPointSerializer; +import org.springframework.data.mongodb.core.geo.GeoJsonSerializersModule.GeoJsonPolygonSerializer; import org.springframework.lang.Nullable; import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.Version; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonNode; @@ -34,7 +40,10 @@ import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.node.ArrayNode; /** - * A Jackson {@link Module} to register custom {@link JsonSerializer} and {@link JsonDeserializer}s for GeoJSON types. + * A Jackson {@link Module} to register custom {@link JsonDeserializer}s for GeoJSON types. + *
+ * Use {@link #geoJsonModule()} to obtain a {@link Module} containing both {@link JsonSerializer serializers} and + * {@link JsonDeserializer deserializers}. * * @author Christoph Strobl * @author Oliver Gierke @@ -47,12 +56,97 @@ public class GeoJsonModule extends SimpleModule { public GeoJsonModule() { - addDeserializer(GeoJsonPoint.class, new GeoJsonPointDeserializer()); - addDeserializer(GeoJsonMultiPoint.class, new GeoJsonMultiPointDeserializer()); - addDeserializer(GeoJsonLineString.class, new GeoJsonLineStringDeserializer()); - addDeserializer(GeoJsonMultiLineString.class, new GeoJsonMultiLineStringDeserializer()); - addDeserializer(GeoJsonPolygon.class, new GeoJsonPolygonDeserializer()); - addDeserializer(GeoJsonMultiPolygon.class, new GeoJsonMultiPolygonDeserializer()); + registerDeserializersIn(this); + // TODO: add serializers as of next major version (4.0). + } + + /** + * Obtain a {@link Module} containing {@link JsonDeserializer deserializers} for the following {@link GeoJson} types: + *
+ *
+ * { "type": "Point", "coordinates": [10.0, 20.0] }
+ *
+ *
+ *
+ * @author Bjorn Harvold
+ * @author Christoph Strobl
+ * @since 3.2
+ */
+ static class GeoJsonPointSerializer extends GeoJsonSerializer
+ *
+ * {
+ * "type": "LineString",
+ * "coordinates": [
+ * [10.0, 20.0], [30.0, 40.0], [50.0, 60.0]
+ * ]
+ * }
+ *
+ *
+ *
+ * @author Bjorn Harvold
+ * @author Christoph Strobl
+ * @since 3.2
+ */
+ static class GeoJsonLineStringSerializer extends GeoJsonSerializer
+ *
+ * {
+ * "type": "MultiPoint",
+ * "coordinates": [
+ * [10.0, 20.0], [30.0, 40.0], [50.0, 60.0]
+ * ]
+ * }
+ *
+ *
+ *
+ * @author Bjorn Harvold
+ * @author Christoph Strobl
+ * @since 3.2
+ */
+ static class GeoJsonMultiPointSerializer extends GeoJsonSerializer
+ *
+ * {
+ * "type": "MultiLineString",
+ * "coordinates": [
+ * [ [10.0, 20.0], [30.0, 40.0] ],
+ * [ [50.0, 60.0] , [70.0, 80.0] ]
+ * ]
+ * }
+ *
+ *
+ *
+ * @author Bjorn Harvold
+ * @author Christoph Strobl
+ * @since 3.2
+ */
+ static class GeoJsonMultiLineStringSerializer extends GeoJsonSerializer
+ *
+ * {
+ * "type": "Polygon",
+ * "coordinates": [
+ * [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ]
+ * ]
+ * }
+ *
+ *
+ *
+ * @author Bjorn Harvold
+ * @author Christoph Strobl
+ * @since 3.2
+ */
+ static class GeoJsonPolygonSerializer extends GeoJsonSerializer
+ *
+ * {
+ * "type": "MultiPolygon",
+ * "coordinates": [
+ * [[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]]],
+ * [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],
+ * [[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]
+ * ]
+ * }
+ *
+ *
+ *
+ * @author Bjorn Harvold
+ * @author Christoph Strobl
+ * @since 3.2
+ */
+ static class GeoJsonMultiPolygonSerializer extends GeoJsonSerializer