gpt4 book ai didi

geojson - 没有找到适合 GeoJsonPoint 类型的构造函数

转载 作者:行者123 更新时间:2023-12-04 02:00:42 31 4
gpt4 key购买 nike

很难弄清楚我做错了什么。可悲的是,我曾经让它工作过,但无法确定是什么改变了它。

据我了解,现在应该完全支持。

有问题的对象:

@Document
public class Place {

public final static String URI = "/place";

@Id private String id;

private String name;

private String caption;

private GeoJsonPoint location;

public Place() {}

public Place(GeoJsonPoint geoJsonPoint) {
this.location = geoJsonPoint;
}

// Proper getters & setters clipped.
}

调用(我的 Spring Boot 版本由于某种原因包含了额外的 x/y 坐标。)

{
"id": null,
"name": null,
"caption": null,
"location": {
"x": 41.988161,
"y": -87.6911499,
"type": "Point",
"coordinates": [
41.988161,
-87.6911499
]
}
}

Pom(也许我有错误/冲突的依赖关系?)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>...</groupId>
<artifactId>...</artifactId>
<version>0.1.0</version>

<properties>
<start-class>com.nestorledon.hang2gether.core.Application</start-class>

<!-- Includes new GeoJson support. -->
<spring-data-releasetrain.version>Fowler-RELEASE</spring-data-releasetrain.version>
</properties>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.M2</version>
</parent>

<dependencies>

<dependency>
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test-mvc</artifactId>
<version>1.0.0.M2</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-webmvc</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>

<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>

<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>

<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>

</dependencies>

<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

<repositories>
<repository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/libs-snapshot</url>
<snapshots><enabled>true</enabled></snapshots>
</repository>

<repository>
<id>spring-milestone</id>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>

<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/libs-snapshot</url>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>

</project>

最佳答案

终于搞定了。

创建了一个自定义的 JsonDeserializer

public class GeoJsonDeserializer extends JsonDeserializer<GeoJsonPoint> {

private final static String GEOJSON_TYPE_POINT = "Point";

private final static String JSON_KEY_GEOJSON_TYPE = "type";
private final static String JSON_KEY_GEOJSON_COORDS = "coordinates";


@Override
public GeoJsonPoint deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {

final JsonNode tree = jp.getCodec().readTree(jp);
final String type = tree.get(JSON_KEY_GEOJSON_TYPE).asText();
final JsonNode coordsNode = tree.get(JSON_KEY_GEOJSON_COORDS);

double x = 0;
double y = 0;
if(GEOJSON_TYPE_POINT.equalsIgnoreCase(type)) {
x = coordsNode.get(0).asDouble();
y = coordsNode.get(1).asDouble();
}

else {
System.out.println(String.format("No logic present to deserialize %s ", tree.asText()));
}

final GeoJsonPoint point = new GeoJsonPoint(x, y);

return point;
}
}

然后我只是在属性本身上指定了一个转换器。

@JsonDeserialize(using = GeoJsonDeserializer.class)
private GeoJsonPoint location;

关于geojson - 没有找到适合 GeoJsonPoint 类型的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31533390/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com