我正在编写自定义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()的情况?

额外的问题:两种方法都可能返回nullnull可能只有一个吗?

最佳答案

关于空值不能说太多,但是在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()

10-01 15:09