我不知道标题是否令人困惑,但假设我有这样一个界面:
@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中有这样的功能吗?我是不是用错注解了?
2条答案
按热度按时间93ze6v8z1#
我在使用openapi生成器自动生成接口时遇到了类似的问题。这里的问题是我不能轻易地移除
@Path
来自接口的注解并将其添加到类中会导致歧义问题。问题
@Path
-但是,带注解的接口仅适用于在已注册包上自动发现的资源。对于已注册的包,所有用@Path
将示例化。为了防止这种情况发生,您只需手动向
ResourceConfig
如下例所示:只需确保您的接口不在已向您的注册的包中
ResourceConfig
. 使用这种方法,您可以使用示例中的实现以及@Path
添加到接口的注解将被正确解释。免责声明:可能不应该有任何
@Path
接口上的路径注解,但不幸的是,这是openapi生成器创建的。如果你发现自己处于类似的情况,我希望这能有所帮助。否则,你应该参考公认的答案。ryhaxcpt2#
只有在不使用注解继承的情况下,才能使用注解继承
jax-rs
实现类的注解:在jsr-339的第3.6节中有说明。你重新定义
@Path
以及@Produces
对于方法而不是类。所以
Path
代码中的注解应位于具体类上:顺便说一句,规范鼓励我们复制具体类上的注解:
为了与其他javaee规范保持一致,建议始终重复注解,而不是依赖注解继承。