泽西得到模板路径

时间:2014-10-16 17:43:07

标签: java filter jersey uri

我使用Jersey 2,我想获得URI模板。 原因是我创建了一个基于URI验证的auth系统。我设法工作了:

    @Override
    public void filter(ContainerRequestContext containerRequest) throws IOException {

        String method = containerRequest.getMethod();
        String uri = containerRequest.getUriInfo().getPath();
    }

问题是 getPath 会返回如下内容:

/companies/1

我希望它返回

/companies/{id}

我声明的是:

@Path("{id}")

谢谢

编辑我以为我在这里找到了它:

@Context
private ExtendedUriInfo uriInfo;

//...
Resource matchedModelResource = uriInfo.getMatchedModelResource();
System.out.println(matchedModelResource.getPathPattern().getTemplate().getTemplate());
猜猜猜怎么着? matchedModelResource为空。

另外,这个:

List<UriTemplate> matchedTemplates = uriInfo.getMatchedTemplates();

返回UriTemplate的空列表。 :( 为什么数据没有设定?

1 个答案:

答案 0 :(得分:4)

确定。所以答案是使用:

 uriInfo.getMatchedTemplates();

uriInfo实际上是ExtendedUriInfo

这是我为获得正确语法而编写的代码:

    List<UriTemplate> matchedTemplates = uriInfo.getMatchedTemplates();

    StringBuilder builder = new StringBuilder();

    for (int i = matchedTemplates.size() - 1; i >= 0; i--) {
        builder.append(matchedTemplates.get(i).getTemplate().substring(1));
    }

    System.out.println("Permission is: " + builder.toString());
   // Prints:
   // Permission is: sig/companies/{id}

之前数据为空或空的原因是因为我在我的过滤器类中有一个@PreMatching注释。请不要问为什么。

希望这有助于某人。