2017-11-24 4 views
1

Ich schreibe einen benutzerdefinierten Jersey 2.0 Server Logging-Filter.Was ist der Zweck von javax.ws.rs.container.ResourceInfo.getResourceClass()?

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

Ein Verweis auf ResourceInfo injiziert wird als:

@Context 
private ResourceInfo resourceInfo; 

Schnittstelle ResourceInfo hat zwei Methoden:

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

Gibt es jemals einen Fall, in dem ResourceInfo.getResourceClass() != ResourceInfo.getResourceMethod().getDeclaringClass()?

Bonusfrage: Beide Methoden können null zurückgeben. Ist es möglich, dass nur man wäre null?

Antwort

3

Kann nicht viel über Null-Werte sagen, aber es gibt einen Fall, wenn getResourceClass() != getResourceMethod().getDeclaringClass(), wenn Sie einige Klassenhierarchie wie Superklassen-Ressource haben. Es ist einfacher, in Code zu erhalten, so dass dies berücksichtigen:

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 
} 

Jetzt können Anruf

GET http://localhost:9998/test/ 

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

Perfect. Ich stimme zu, dass Ihr Codebeispiel das Verständnis erleichtert. – kevinarpe