Используя предыдущую версию Джерси (~ 1.12), я использовал для сравнения «данные» элемента литерала с одной аннотацией, если он произошел в конце пути, и другой аннотацию, если это было где-то еще:Сопоставление последнего элемента пути с использованием аннотации 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
теперь соответствует обоим.
- Могу ли я вернуться к старому поведению, в котором я несу ответственность за выход из моего регулярного выражения?
- Есть ли новый/лучший/другой метод для сопоставления только последнего элемента пути в URI?
Вы можете попытаться использовать '@ Encoded' в методе« data $ ». –