Jersey JAX-RS注释接口而不是实现类会导致错误



我得到了一个用JAX-RS注释注释的接口。在实现类本身中,我只是覆盖接口的方法;不覆盖注释或任何内容。

我得到以下错误:类{name}是一个接口,无法实例化

我试着用我的注释接口做了一个jar,并把它放在.war\lib文件夹中,但错误仍然存在。

如果重要的话,我将使用JBoss的嵌入式Tomcat。

界面如下:

@javax.ws.rs.Path( "/jerseytesting.HelloWorldService" )
public interface HelloWorldService {
@javax.ws.rs.POST
@javax.ws.rs.Path( "/Greet" )
@javax.ws.rs.Consumes({"application/protobuf", "application/json"})
@javax.ws.rs.Produces({"application/protobuf", "application/json"})
jerseytesting.Twirpproto.HelloResponse greet(jerseytesting.Twirpproto.HelloRequest request);
}

这里是实现:

public class Twirpy implements Twirpproto.HelloWorldService {
@Override
public HelloResponse greet(HelloRequest request) {
HelloResponse helloResponse = HelloResponse.newBuilder().setResponse("Hello, " + request.getName()).build();
return helloResponse;
}
}

来自API文档:

JAX-RS注释可以用于的方法和方法参数超类或实现的接口。

因此,只有方法注释可以在接口上。

具体类应该具有@Path。只有到那时,JAX-RS才会知道创建该具体类的实例。

像这样:

@javax.ws.rs.Path( "/jerseytesting.HelloWorldService" )
public class Twirpy implements Twirpproto.HelloWorldService {
@Override
public HelloResponse greet(HelloRequest request) {
HelloResponse helloResponse = HelloResponse.newBuilder().setResponse("Hello, " + request.getName()).build();
return helloResponse;
}
}

最新更新