[从JAX-RS ContainerRequestFilter
内部,我想获得请求的未解析路径URI;即类似“ todos / {id}”。通过requestContext.getUriInfo().getPath()
我只能得到解析了参数的路径,例如“ todos / 1”。是否可以通过任何方法获取带有参数的路径?
您可能只需要构建模板。没那么难。您可以访问资源类和方法(从注入的ResourceInfo
),只需使用UriBuilder
方法即可。它具有接受path()
和Class
的Method
方法,并将基于这些对象的@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();
}
}