@Path
私はこれが次のように注釈されているクラスを持っています:
@Path("widgets")
@Produces(MediaType.APPLICATION_XML)
public class WidgetResource {
@GET
public Response getWidgets(@QueryParam("limit"))
{
//This class returns the plural noun, a list of widgets
//...}
@GET
@Path("widget/{id}")
public Response getWidgetById(@PathParam("id") long id)
{
//This class returns a single widget by id
//...}
テストクライアントを起動すると、localhost / widgetsは期待どおりにマップされますが、getWidgetById
メソッドがにマップされる場合localhost/widgets/widget/{id}
。これは私が望んでいることではありません-私が欲しいlocalhost/widgets and localhost/widget/{id}
クラスレベルでアノテーションを省略しようとしました@Path
が、JerseyがこのクラスをRESTリソースとして認識できません(クラスレベルにがない限り、ScanningResourceConfig
とClassNameResourceConfig
-の両方をリソースとしてロードできませんでした@Path
)。
WidgetResource
(醜い)回避策は、クラス間でメソッドをクラスとクラスに分割することだと思いWidgetsResource
ます。これらのメソッドは両方とも同じクラスのリソースを共有するため、これはひどい解決策だと思いますが、REST-ful localhost/widget
(単一のエンティティの場合)とlocalhost/widgets
(複数の場合)が本当に必要です。
何かが足りないのですか?@Path
メソッドに注釈を付けるだけで(動作させることができませんでした)、Jerseyにリソースクラスとしてクラスを取得させる方法はありますか?そうでない場合は、絶対マッピング(@Path(/widget/{id})
)またはいくつかを強制できますか?相対マッピング(@Path(../widget/id
)-どちらも実際には機能しません-私が求めているもののアナロジーにすぎません。ありがとう!