2013-08-29 23 views
0

使用Jersey的先前版本(〜1.12),我用来将文本路径元素“data”与一个注释匹配(如果它出现在路径末尾),并且另一个注解如果是别的地方:使用Jersey中的JaxRS @Path注释匹配上一个路径元素

@Path("data$") 
public Object getDataResource(@Context UriInfo uriInfo) { 
    // Matched when 'data' is the last path element 
    ... 
} 

@Path("{name}") 
public Object getNamedResource(@Context UriInfo uriInfo) { 
    // Matched when 'data' is not the last path element 
    ... 
} 

在1.12和1.17之间的某一点,这种行为已发生变化,之前的模式应用于传入的URI的“$”字符转义现在。现在,第一个方法(getDataResource)从不匹配。

例如,匹配http://.../data/data时,我希望getNamedResource匹配第一个“数据”和getDataResource以匹配第二个“数据”。相反,getNamedResource现在与两者都匹配。

  1. 我可以恢复到我负责转义我的正则表达式的旧行为吗?
  2. 是否有一种新的/更好的/其他的技术只匹配URI上的最后一个路径元素?
+0

您可以尝试在“data $”方法中使用'@ Encoded'。 –

回答

0

我发现的最佳解决方案是手动检测第二种方法是否匹配最后一个路径元素并手动委托给第一个。

@Path("{name}") 
public Object getNamedResource(@Context UriInfo uriInfo) { 
    boolean lastElement = uriInfo.getMatchedURIs() 
          .iterator().next().equals(uriInfo.getPath()); 
    if (lastElement && "data".equals(name)) { 
     return getDataResource(uriInfo); 
    } 
    ... 
} 

不是一个坏的解决我特别的问题,但我仍然感到沮丧泽西岛是逃避我的模式不问我第一。

相关问题