プロジェクトの抽象クラスであり、データベースに格納されている動物を操作する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
このコードは正しく機能します、これとてもいいです。)