我使用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的空列表。 :( 为什么数据没有设定?
答案 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注释。请不要问为什么。
希望这有助于某人。