javax.ws.rs.container.ResourceInfo.getResourceClass()的目的是什么?

时间:2017-11-24 03:19:08

标签: java jax-rs jersey-2.0

我正在编写一个自定义的Jersey 2.0服务器日志记录过滤器。

示例:https://github.com/jersey/jersey/blob/master/core-common/src/main/java/org/glassfish/jersey/logging/ServerLoggingFilter.java

ResourceInfo的引用注释为:

@Context
private ResourceInfo resourceInfo;

接口ResourceInfo有两种方法:

  • Class<?> getResourceClass()
  • Method getResourceMethod()

是否存在ResourceInfo.getResourceClass() != ResourceInfo.getResourceMethod().getDeclaringClass()

的情况

加分问题:两种方法都可能会返回null可能是null吗?

1 个答案:

答案 0 :(得分:3)

对于null值不能说太多,但是如果你有一些像超类资源那样的类层次结构,那么有getResourceClass() != getResourceMethod().getDeclaringClass()的情况。在代码中显示更容易,因此请考虑以下事项:

public class SuperResource {
    @GET
    @Produces({ MediaType.APPLICATION_JSON })
    public Response getInfo() {
        return Response.ok("{\"info\":1}").build(); 
    }
}

@Path("test")
public class MyResource  extends SuperResource{
    // ... other endpoints
}

现在让我们来电话

GET http://localhost:9998/test/

getResourceClass() : class ru.varren.MyResource
getResourceMethod(): javax.ws.rs.core.Response ru.varren.SuperResource.getInfo()