泽西岛JAX-RS注释接口不是实现类导致错误

时间:2018-12-07 10:43:19

标签: java 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;
    }
}

1 个答案:

答案 0 :(得分:3)

来自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;
    }
}