Ответ 1
Наследование аннотаций можно использовать только в том случае, если вы не используете аннотацию jax-rs
для класса реализации: это указано в разделе 3.6 JSR-339.
Вы переопределяете @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 рекомендуется всегда повторять аннотации полагаться на наследование аннотации.