having lot of trouble figuring out i'm doing wrong. sadly had working @ 1 point, can't determine changed broke it.
from understand should supported now.
object in question:
@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. } the call (my version of spring boot includes x/y coords reason.)
{ "id": null, "name": null, "caption": null, "location": { "x": 41.988161, "y": -87.6911499, "type": "point", "coordinates": [ 41.988161, -87.6911499 ] } } the pom (maybe have wrong/clashing dependencies?)
<?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>
finally got working.
created custom 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 deserialize %s ", tree.astext())); } final geojsonpoint point = new geojsonpoint(x, y); return point; } } then specified converter on property itself.
@jsondeserialize(using = geojsondeserializer.class) private geojsonpoint location;
Comments
Post a Comment