如何在JAX-RS ContainerRequestFilter中获取路径模板?

如何在JAX-RS ContainerRequestFilter中获取路径模板?,jax-rs,resteasy,Jax Rs,Resteasy,在JAX-RSContainerRequestFilter中,我希望获得请求的未解析路径URI;i、 e.类似于“todos/{id}”的东西。通过requestContext.getUriInfo().getPath()我只获得已解析参数的路径,例如“todos/1”。有没有办法用参数来获取路径?您可能只需要构建模板。没那么难。您可以访问资源类和方法(从注入的ResourceInfo),只需使用UriBuilder方法即可。它有接受Class和Method的path()方法,它将根据这些对象的

在JAX-RS
ContainerRequestFilter
中,我希望获得请求的未解析路径URI;i、 e.类似于“todos/{id}”的东西。通过
requestContext.getUriInfo().getPath()
我只获得已解析参数的路径,例如“todos/1”。有没有办法用参数来获取路径?

您可能只需要构建模板。没那么难。您可以访问资源类和方法(从注入的
ResourceInfo
),只需使用
UriBuilder
方法即可。它有接受
Class
Method
path()
方法,它将根据这些对象的
@path
注释为您构建Uri。然后只需使用
UriBuilder#toTemplate()
获取模板即可

public class UriTestingFilter implements ContainerRequestFilter {

    @Context
    private ResourceInfo resourceInfo;


    @Override
    public void filter(ContainerRequestContext request) throws IOException {
        UriInfo uriInfo = request.getUriInfo();

        Class<?> resourceClass = resourceInfo.getResourceClass();
        Method resourceMethod = resourceInfo.getResourceMethod();

        UriBuilder partialUriBuilder = UriBuilder.fromResource(resourceClass)
                .path(resourceMethod);
        String partialUri = partialUriBuilder.toTemplate();

        URI baseUri = uriInfo.getBaseUri();
        UriBuilder fullUriBuilder = UriBuilder.fromUri(baseUri)
                .path(resourceClass)
                .path(resourceMethod);
        String fullUri = fullUriBuilder.toTemplate();
    }
}
公共类UriTestingFilter实现ContainerRequestFilter{
@上下文
私有资源信息资源信息;
@凌驾
公共无效筛选器(ContainerRequestContext请求)引发IOException{
UriInfo-UriInfo=request.getUriInfo();
Class resourceClass=resourceInfo.getResourceClass();
方法resourceMethod=resourceInfo.getResourceMethod();
UriBuilder partialUriBuilder=UriBuilder.fromResource(resourceClass)
.路径(资源法);
字符串partialUri=partialUriBuilder.toTemplate();
URI baseUri=uriInfo.getBaseUri();
UriBuilder fullUriBuilder=UriBuilder.fromUri(baseUri)
.path(资源类)
.路径(资源法);
字符串fullUri=fullUriBuilder.toTemplate();
}
}

获取
资源信息的另一种方法是实现
动态功能。