Как получить шаблон пути в JAX-RS ContainerRequestFilter? - PullRequest
0 голосов
/ 26 января 2020

Из JAX-RS ContainerRequestFilter я хотел бы получить неразрешенный путь URI запроса; то есть что-то вроде "todos / {id}". Через requestContext.getUriInfo().getPath() я получаю только путь с разрешенными параметрами, например, "todos / 1". Есть ли способ получить путь с параметрами вместо этого?

1 Ответ

0 голосов
/ 28 января 2020

Вам может понадобиться просто создать шаблон. Это не так сложно. Вы можете получить доступ к классу и методу ресурса (из введенного ResourceInfo) и просто использовать методы UriBuilder. У него есть path() методы, которые принимают Class и Method, и он создаст Uri для вас на основе аннотаций @Path этих объектов. Тогда просто получите шаблон с 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();
    }
}
...