2016-11-03 3 views
0

インタフェースに基づいて直列化を解除したいと思います。 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を使用していない場合は

すべてが、動作します。だから明らかに適切なコンストラクタなどがあります。

答えて

1

おそらく遅いですが、あなたと同じ問題がありましたが、私はGeoJsonModuleを有効にするためにSpringに設定を追加する必要があると考えました。あなたはすでにそれを持っており、これを追加しないのであれば、あなたは、Spring構成クラスを作成する必要があります。

@Configuration 
public class SpringMongoDbConfig { 

    @Bean 
    public Module registerGeoJsonModule(){ 
     return new GeoJsonModule(); 
    } 
} 

SpringMongoDbConfigあなたが好むものを選ぶ、私は春の設定を編集するために作成したクラスです。

GeoJsonModule docから見ることができるように、シリアライズとデシリアライズのための特定のクラスです。抽象クラスの他のコードはすべて私にとっては良さそうです。それは行く方法です。

+0

それは私のためにそれをしました。ありがとうございました。私は同じ問題を抱えていた – thomi

関連する問題