タイトルがわかりにくいかどうかはわかりませんが、次のインターフェイスがあるとしましょう。
@Produces(MediaType.APPLICATION_JSON)
@Path("/user")
public interface UserService {
@GET
@Path("/{userId}")
public Response getUser(@PathParam("userId") Long userId);
}
バージョンを実装しようとすると、Eclipseがオーバーライドされたメソッドのアノテーションを書き換えるが、クラスのアノテーションを書き換えないのはなぜですか?
class UserServiceImpl implements UserService {
@Override
@GET
@Path("/{userId}")
public Response getUser(@PathParam("userId") Long userId) {
// TODO Auto-generated method stub
return null;
}
}
私はRESTfulWebサービスの標準定義を作成しようとしていて、さまざまな実装を行っていました。このようなことは標準のjax-rsで可能ですか?万が一、間違った注釈を使用していませんか?
アノテーションの継承は、実装クラスでanyjax-rs
アノテーションを使用しない場合にのみ使用できます。これは、JSR-339のセクション3.6に記載されています。
メソッドには@Path
と@Produces
を再定義しますが、クラスには再定義しません。
したがって、コードのPath
アノテーションは、具象クラス上にある必要があります。
public interface UserService {
@GET
@Path("/{userId}")
@Produces(MediaType.APPLICATION_JSON)
public Response getUser(@PathParam("userId") Long userId);
}
@Path("/user")
class UserServiceImpl implements UserService {
@Override
@GET
@Path("/{userId}")
@Produces(MediaType.APPLICATION_JSON)
public Response getUser(@PathParam("userId") Long userId) {
// TODO Auto-generated method stub
return null;
}
}
ところで、仕様では、具象クラスに注釈を複製することを推奨しています。
他のJava EE仕様との一貫性を保つために、アノテーションの継承に依存するのではなく、常にアノテーションを繰り返すことをお勧めします。