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



我正在编写一个自定义的 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

不能说太多关于空值,但在某些情况下,如果你有一些类层次结构,如超类资源,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()

最新更新