Get handler from URI in Jersey?

2020-03-03 07:29发布

Inside a ContainerResponseFilter I would like to get the "handler", i.e. the class where @Path and the @GET/@PUT-annotated method matches the URL I will provide.

Example:

someJerseyVariable.getHandlerForURI(request.getRequestUri()); 

I can't find any similar method.

The reason I want this, is to have statistics for how many requests each handler served and how many succeeded/failed. Any other alternatives are also welcome.

标签: java rest jersey
1条回答
【Aperson】
2楼-- · 2020-03-03 08:07

You can inject UriInfo or ExtendedUriInfo. UriInfo contains only last matched class, ExtendedUriInfo can even report matched method (and much more info, see the linked javadocs).

Code sample:

public class Filter implements ContainerResponseFilter {
    @Context UriInfo uriInfo;
    @Context ExtendedUriInfo extendedUriInfo;

    @Override
    public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
        System.out.println(uriInfo.getMatchedResources().get(0).getClass());
        System.out.println(extendedUriInfo.getMatchedMethod().toString());
        return response;
    }
}
查看更多
登录 后发表回答