プロジェクトの抽象クラスであり、データベースに格納されている動物を操作するAnimalためのRESTリソース(JAX-RSサーバー上にJacksonを(逆)シリアル化に使用)があるとします。PUTそれらには具体的なタイプがあり、RESTリソースはリクエストのパスでタイプを指定します。
@PUT
@Consumes(MediaType.APPLICATION_JSON)
@Path("/{entityType}/{id: \\d+}")
public <T extends Animal> void putAnimal(@PathParam("entityType") String entityType, @PathParam("id") String id, Animal input) throws IOException {
//...
}
entityTypeデシリアライズする具象クラスを選択するために使用したいと思います(DogまたはCat、または何でも、存在するためentityType、dogまたはcat何でも)。ここで説明するには複雑すぎるため、JSON入力自体に型情報を入れることはできません。
したがって、AIUIAnimalがカスタムTypeIdResolverなどで注釈を付けることは、型情報がJSON自体に含まれないため(そして型リゾルバーが取得するすべての情報であるため)、役に立ちません。カスタムを使用することを計画していましたMessageBodyReaderが、私が知る限り、メソッドで渡された本体から他のパラメーター値を取得しないため、readValue何にデシリアライズするかわかりません。
私は何が欠けていますか?このアプローチが失敗した場合、動物固有のエンドポイントを指定せずに、どのように私が望むことを達成できますか(これは、多くの重複コードと一般性の喪失につながります-今、私はのサブクラスを追加でき、Animalこのコードは正しく機能します、これとてもいいです。)