【问题标题】:Deserialize geojson from elasticsearch response into POJO将elasticsearch响应中的geojson反序列化为POJO
【发布时间】:2022-08-04 00:55:42
【问题描述】:

我正在尝试使用杰克逊反序列化弹性搜索的响应。 在我添加几何图形之前,一切正常。

我正在使用geolatte-geojson 来处理几何图形。

但由于某种原因,elasticsearch 响应的反序列化并不顺利,可能是 WKT 格式的原因。

我为 geolatteModule 创建了一个用于反序列化的 bean:

@Bean
public GeolatteGeomModule geomModule() {
    return new GeolatteGeomModule();
}

下面是 elasticsearch 的几何响应的样子:

POLYGON((-95.26605606079102 29.724060758766743,-95.26631355285645 29.70900307937485,-95.23798942565917 29.702218931464575,-95.22185325622557 29.704306410402122,-95.2236557006836 29.72592417587012,-95.25712966918945 29.727638489043596,-95.26605606079102 29.724060758766743))

这是我试图反序列化elasticsearch对POJO的响应的方式:

Document document = objectMapper.convertValue(hit.getSourceAsMap(), Document.class);

一些可能有用的附加点:
我也将几何对象发送到 DTO,当它作为 WKT 发送时,我遇到了同样的错误。但是当以 geojson 格式发送它时它工作正常。

我遇到的错误:

java.lang.IllegalArgumentException: (was java.lang.NullPointerException) (through reference chain: com.kayrros.searchmanager.model.entity.Document[\"geometry\"])
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4393)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:4324)
  • 它似乎不受支持:github.com/spring-projects/spring-data-elasticsearch/issues/…。一个自定义的 Jackson Deserializer 可能可以解决问题
  • @Val 实际上,我正在使用带有 geolatte-geojson 的 java 高级休息客户端。我用过调试器,发现需要是{type: POLYGON, coordinates: []}格式。有没有办法从 WKT 得到这个?
  • 谢谢将尝试使用地理工具,只是想知道是否有任何方法可以从 geojson 格式而不是 WKT 的弹性搜索中获取数据
  • 从 ES 中,您可以将任何索引到源文档中。如果你索引 WKT,你会得到 WKT,如果你索引 GeoJson,你会得到 GeoJson

标签: java spring-boot elasticsearch jackson geojson


【解决方案1】:

如果你想找回 GeoJson,你应该只将 GeoJson 发送到你的源文档而不是 WKT,这样它会比在读取时从 WKT 转换到 GeoJson 容易得多。

【讨论】:

    猜你喜欢
    • 2014-03-10
    • 2017-08-09
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 2014-06-27
    • 2014-10-16
    相关资源
    最近更新 更多