インタフェースに基づいて直列化を解除したいと思います。 mongodb.core.geo.GeoJson)フィールド型がジャクソンとのインタフェースである場合、特定の型への多型(非)直列化
POJO:
public class Geofence {
@Id
private String id;
private String topic;
private Date expiresOn;
private Map<String, String> properties;
private GeoJson geometry;
// getters and setters
}
ジオメトリフィールドがGeoJsonPolygon
またはGeoJsonPoint
である可能性があります。
また、私はこのミックスインクラスを追加しました:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = GeoJsonPolygon.class, name = "Polygon"),
@JsonSubTypes.Type(value = GeoJsonPoint.class, name = "Point")})
public abstract class GeoJsonMixIn implements GeoJson{
@JsonProperty("type")
public String getType() {
return null;
}
@JsonProperty("coordinates")
public Iterable<?> getCoordinates() {
return null;
}
}
私は
{
"expiresOn": "2017-01-01",
"topic": "test",
"properties": {
"radius": 200
},
"geometry": {
"type": "Point",
"coordinates": [
13.349997997283936,
52.51448414445241
]
}
}
のような(RESTインタフェースを介して)オブジェクトをデシリアライズしようとした場合、私はこの例外を取得:
はでしたドキュメントを読み込みません:org.springframework.data.mongodb.core.geo.GeoJsonPointのインスタンスを構築できません:適切なコンストラクタが見つかりません。オブジェクト値から逆シリアル化できません。 ?デフォルトコンストラクタまたは作成者をissing、またはおそらく型情報を有効/追加する必要があります)
連載では私が取得:
は、コンストラクタを使用してorg.springframework.data.mongodb.core.geo.GeoJsonインスタンス化に失敗しました引数のあるNO_CONSTRUCTOR
これも可能ですか?どうすればこれを達成できますか?私は
private GeoJsonPoint geometry;
に変更し、私にGeoJSONが実際にポイントであるかのように - 私はpolymorhpismを使用していない場合は
すべてが、動作します。だから明らかに適切なコンストラクタなどがあります。
それは私のためにそれをしました。ありがとうございました。私は同じ問題を抱えていた – thomi