2013-03-04 3 views
4

Resteasy выглядит игнорировать слэш, так что я не могу написать два различных веб-служб с и без слэш, и этот пример показывает:остальное - Resteasy резки Продольный слэш от @Path

@Path("foo") 
public class TestClass { 

    @GET 
    @Path("/bar") 
    public Response bar1() { 
     ... 
    } 

    @GET 
    @Path("/bar/") 
    public Response bar2() { 
     ... 
    } 
} 

С Resteasy в GET-запрос/foo/bar, а также/foo/bar/обрабатывается bar2(). Учитывая RFC3986 и JAX-RS Spec, я не понимаю, почему это происходит так. Может быть, это проблема с RESTEasy или есть что-то, над чем я наблюдаю?

+0

Еще один странный эффект, который я вижу, заключается в том, что если у вас есть только ваш метод с @Path ("/ bar"), оба URL/root/bar и/root/bar/родственники ссылаются на него, если мы не знаем, было ли это вызвано с завершающим/или нет. –

ответ

3

Вот что говорит JAX-RS specification

3.7 Соответствующие запросы к методам ресурсов

3.7.3 Преобразование URI шаблонов для регулярных выражений

  1. URI кодирует шаблон, не обращая внимания Спецификации переменных шаблона URI.
  2. Избегайте любых символов регулярного выражения в шаблоне URI, снова игнорируя спецификации переменных шаблона URI.
  3. Замените каждую переменную шаблона URI группой захвата, содержащей указанное регулярное выражение, или «([^ /] +?)», Если не указано регулярное выражение .
  4. Если результирующая строка заканчивается на «/», удалите последний символ.
  5. Добавить '(/.*)?' В результат.

Как я читал, RESTEasy правильно реализует спецификацию.

Смежные вопросы