0

在计算我做错了什么时遇到很多麻烦。可悲的是,我曾经在某一点上工作,但不能确定我改变了什么,打破了它。找不到类型为GeoJsonPoint的合适构造函数

从我的理解,现在应该完全支持。

对象的问题:(我的春天启动的版本包括某些原因额外的X/Y coords)使用

@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. 
} 

呼叫

{ 
    "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> 

回答

0

最后得到了这个工作。

创建一个自定义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; 
0

Spring Data MongoDB已经包含可在杰克逊注册反序列化GeoJsonPoint的模块。

安装(春季启动),只需添加到您的配置类: @Bean public Module registerGeoJsonModule(){ return new GeoJsonModule(); }

那么你应该能够使用反序列化:

{ 
    "location":{ 
     "x":0, 
     "y":0 
    } 
} 
+1

将尝试这个时候我有一个时刻。 –

相关问题