com.alibaba.fastjson2.support.spring6.data.mongodb.GeoJsonReaderModule Maven / Gradle / Ivy
package com.alibaba.fastjson2.support.spring6.data.mongodb;
import com.alibaba.fastjson2.JSONReader;
import com.alibaba.fastjson2.annotation.JSONCreator;
import com.alibaba.fastjson2.annotation.JSONField;
import com.alibaba.fastjson2.annotation.JSONType;
import com.alibaba.fastjson2.modules.ObjectReaderModule;
import com.alibaba.fastjson2.reader.ObjectReaderProvider;
import org.springframework.data.geo.Point;
import org.springframework.data.mongodb.core.geo.GeoJsonLineString;
import org.springframework.data.mongodb.core.geo.GeoJsonMultiPoint;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.geo.GeoJsonPolygon;
import java.util.List;
public class GeoJsonReaderModule
implements ObjectReaderModule {
public static final GeoJsonReaderModule INSTANCE = new GeoJsonReaderModule();
@Override
public void init(ObjectReaderProvider provider) {
provider.mixIn(Point.class, PointMixin.class);
provider.mixIn(GeoJsonLineString.class, GeoJsonLineStringMixin.class);
provider.mixIn(GeoJsonMultiPoint.class, GeoJsonMultiPointMixin.class);
provider.register(GeoJsonPoint.class, GeoJsonPointReader.INSTANCE);
provider.register(GeoJsonPolygon.class, GeoJsonPolygonReader.INSTANCE);
}
@JSONType(deserializeFeatures = JSONReader.Feature.SupportArrayToBean)
static class PointMixin {
@JSONCreator(parameterNames = {"x", "y"})
public PointMixin(double x, double y) {
}
}
@JSONType(
typeKey = "type",
typeName = "MultiPoint",
deserializeFeatures = JSONReader.Feature.SupportArrayToBean)
abstract static class GeoJsonMultiPointMixin {
@JSONCreator(parameterNames = "coordinates")
public GeoJsonMultiPointMixin(List points) {
}
@JSONField(deserialize = false)
public abstract List getCoordinates();
}
@JSONType(
typeKey = "type",
typeName = "LineString",
deserializeFeatures = JSONReader.Feature.SupportArrayToBean
)
abstract static class GeoJsonLineStringMixin {
@JSONCreator(parameterNames = "coordinates")
public GeoJsonLineStringMixin(List points) {
}
@JSONField(deserialize = false)
public abstract List getCoordinates();
}
}