I am maintaining a software that we need to pass an object of this type:
org.geolatte.geom.Point<org.geolatte.geom.G2D>
,
I have customized deserialiser as such:
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import org.geolatte.geom.G2D;
import org.geolatte.geom.Point;
import org.geolatte.geom.builder.DSL;
import org.geolatte.geom.crs.CoordinateReferenceSystem;
import static org.geolatte.geom.crs.CoordinateReferenceSystems.WGS84;
import static org.geolatte.geom.builder.DSL.g;
import static org.geolatte.geom.builder.DSL.point;
import java.io.IOException;
// public class PointG2DDeserializer {
public class PointG2DDeserializer extends JsonDeserializer<Point<G2D>> {
@Override
public Point<G2D> deserialize(JsonParser p, DeserializationContext ctx) throws IOException {
System.out.println("XXXXXX 1 PointG2DDeserializer.deserialize invoked,WGS84="+WGS84 +",p="+p.toString());
try {
JsonNode node = p.getCodec().readTree(p);
JsonNode coordinates = node.get("coordinates");
if (coordinates == null) {
System.out.println("XXXXXX 2 coordinates node is null");
return point(WGS84, new G2D(0.1, 0.2));
} else {
double x = coordinates.get(0).asDouble();
double y = coordinates.get(1).asDouble();
System.out.println("XXXXXX 3 coordinates node is not null");
return point(WGS84, new G2D(x, y));
}
} catch (Exception e) {
System.out.println("XXXXXX 4 Error during deserialization: " + e.getMessage());
e.printStackTrace();
throw e;
}
}
}
I know my request message definitely has “coordinates” JSON element, but above function always output:
XXXXXX 2 coordinates node is null
Anybody has any idea?