栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Spring Boot上使用Hibernate映射PostGIS几何点字段

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Spring Boot上使用Hibernate映射PostGIS几何点字段

最后,我发现我的配置是OK,可能是杰克逊是无法管理Point正确的数据类型。因此,我自定义了其JSON序列化和反序列化:

  • 将这些注释添加到我们的coordinates字段中:

    @JsonSerialize(using = PointToJsonSerializer.class)

    @JsonDeserialize(using = JsonToPointDeserializer.class)

  • 创建这样的序列化器:

    import java.io.IOException;

    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.JsonSerializer;
    import com.fasterxml.jackson.databind.SerializerProvider;
    import com.vividsolutions.jts.geom.Point;

    公共类PointToJsonSerializer扩展了JsonSerializer [HTML_REMOVED] {

    @Overridepublic void serialize(Point value, JsonGenerator jgen,        SerializerProvider provider) throws IOException,        JsonProcessingException {    String jsonValue = "null";    try    {        if(value != null) {   double lat = value.getY(); double lon = value.getX(); jsonValue = String.format("POINT (%s %s)", lat, lon);        }    }    catch(Exception e) {}    jgen.writeString(jsonValue);}

    }

  • 创建这样的反序列化器:

    import java.io.IOException;

    import com.fasterxml.jackson.core.JsonParser;
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.DeserializationContext;
    import com.fasterxml.jackson.databind.JsonDeserializer;
    import com.vividsolutions.jts.geom.Coordinate;
    import com.vividsolutions.jts.geom.GeometryFactory;
    import com.vividsolutions.jts.geom.Point;
    import com.vividsolutions.jts.geom.PrecisionModel;

    public class JsonToPointDeserializer extends JsonDeserializer {

    private final static GeometryFactory geometryFactory = new GeometryFactory(new PrecisionModel(), 26910);@Overridepublic Point deserialize(JsonParser jp, DeserializationContext ctxt)        throws IOException, JsonProcessingException {    try {        String text = jp.getText();        if(text == null || text.length() <= 0) return null;        String[] coordinates = text.replaceFirst("POINT ?\(", "").replaceFirst("\)", "").split(" ");        double lat = Double.parseDouble(coordinates[0]);        double lon = Double.parseDouble(coordinates[1]);        Point point = geometryFactory.createPoint(new Coordinate(lat, lon));        return point;    }    catch(Exception e){        return null;    }}

    }

Maybe you can also use this
serializer and this
deserializer, available
here.



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/371211.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号