是否可以定义一个与其实现分开的jax-rs服务接口(使用eclipse和jersey)?

我不知道标题是否令人困惑,但让我说我有这个界面:

@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; } } 

我试图为restful Web服务创建一个标准定义,然后进行不同的实现。 用标准的jax-rs可以这样吗? 我是否有机会使用错误的注释?

只有在实现类上不使用任何 jax-rs注释时,才可以使用注释inheritance:它在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规范保持一致,建议始终重复注释,而不是依赖注释inheritance。