URL-адреса без учета регистра с JAX-RS - PullRequest
8 голосов
/ 11 апреля 2011

Есть ли какой-нибудь простой способ предоставить URL-адреса без учета регистра в веб-сервисе JAX-RS?Цель этого состоит в том, чтобы создать веб-сервис, который является «мягким акцептором». 1

Я полагаю, что это можно сделать с помощью фильтра, который .to[Lower|Upper]Case() отображает все входящие URL-адреса.К сожалению, эта реализация требует от программиста дисциплины / согласованности в обеспечении того, чтобы все жестко запрограммированные строки URL в приложении были строго [в нижнем | верхнем регистре].
Кроме того, я пока не знаю JAX-RS аналог сервлет-фильтра.

Если это имеет значение, я использую Джерси в качестве своей реализации JAX-RS.


1 Asв, «будьте снисходительны в том, что вы принимаете, и строги в том, что вы производите» (не могу вспомнить источник)

Ответы [ 2 ]

7 голосов
/ 11 апреля 2011

Ответ - Нет, поскольку в основном URI согласно RFC 3986 чувствительны к регистру:

6.2.2.1.Нормализация регистра

Для всех URI шестнадцатеричные цифры в триплете кодирования процентов (например, "% 3a" по сравнению с "% 3A") нечувствительны к регистру и, следовательно, должны быть нормализованы для использования заглавных букв для цифрAF.

Когда в URI используются компоненты общего синтаксиса, всегда применяются правила эквивалентности синтаксиса компонентов;а именно, что схема и хост не чувствительны к регистру и поэтому должны быть нормализованы к строчным.Например, URI эквивалентен http://www.example.com/. Предполагается, что другие компоненты общего синтаксиса чувствительны к регистру, если в схеме не указано иное (см. Раздел 6.2.3).

Если вы все еще хотите сделать их нечувствительными к регистру, вы можете использовать фильтр сервлетов и поместить его перед инфраструктурой JAX-RS.Вы по-прежнему должны быть последовательны в своем приложении.

Если вы планируете перейти с Джерси на Apache Wink , вы можете использовать Динамические ресурсы , чтобы убедиться, что все URL-адресаниже / в верхнем регистре.Таким образом, объединение фильтра сервлетов с динамическими ресурсами может быть полным решением для этого случая.

4 голосов
/ 10 ноября 2011

Мне кажется, я нашел простое решение, соответствующее спецификации JAX-RS. Вы можете использовать в @Path регулярное выражение аннотации, например:

@Path("/{message:[mM][eE][sS][aA][gG][eE]}")

Я использовал его с реализацией JBoss RESTeasy. Подробнее там .

...