| 知乎专栏 |
正常情况下是不需要做反序列化操作的。如花你想测试,打印一些信息可以这样做。
package cn.netkiller.api.config;
import java.io.IOException;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
public class GeoJsonDeserializer extends JsonDeserializer<GeoJsonPoint> {
@Override
public GeoJsonPoint deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
final JsonNode tree = jsonParser.getCodec().readTree(jsonParser);
final String type = tree.get("type").asText();
final JsonNode coordsNode = tree.get("coordinates");
System.out.println(tree.toString());
System.out.println(type);
System.out.println(coordsNode.toString());
double x = 0;
double y = 0;
if ("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 指定反序列化 Class
@Document
public class Address {
@Id
private String id;
// @GeoSpatialIndexed
@JsonDeserialize(using = GeoJsonDeserializer.class)
private GeoJsonPoint location; // GPS 定位信息
}