親クラスやインタフェースのメソッドで使用されているJAX-RS仕様のアノテーションは,子クラスや実装クラスに継承されます。
アノテーションが継承される条件を次に示します。
親クラスを継承し,かつインタフェースを実装している場合で,アノテーションを継承する条件に両方合致する場合は親クラスのアノテーションを優先します。
複数の親クラスを継承している場合,または複数のインタフェースを実装している場合,それぞれ最初に継承または実装している親クラスまたはインタフェースのアノテーションを優先します。
アノテーションが継承される例を次に示します。
package com.sample.resources; |
この例では,インタフェースcom.sample.resources.A,ルートリソースクラスcom.sample.resources.Resource,およびルートリソースクラスcom.sample.resources.Resource1を含むWebアプリケーション(WARファイル)のコンテキストルートが"resource"で,"example.com"というホストで公開されているとします。
URL"http://example.com/resource/root?query=10"に対するHTTP GETリクエストは,リソースメソッドgetValue()にディスパッチされます。リソースメソッドgetValue()はインタフェースのGETアノテーションを継承しているためです。
一方で,URL"http://example.com/resource/root1?query=10"に対するHTTP GETリクエストは,リソースメソッドgetValue()にディスパッチされないで,HTTPステータスコード405が返ります。リソースメソッドgetValue()はインタフェースのGETアノテーションを継承していないためです。