Как диспетчеризация контролируется в JAX-RS? - PullRequest
2 голосов
/ 31 октября 2009

Я пишу веб-сервис RESTful с помощью RESTeasy. Это реализация JAX-RS. Вы аннотируете класс или метод одной аннотацией @Path. Регулярные выражения используются для получения параметров пути. Например

@Path("/foo{varname:.*}/bar")

соответствует всем шаблонам, начинающимся с "/ foo", заканчивающимся "/ bar" и имеющим что-либо между ними. Все, что находится между ними, присваивается параметру с именем varname.

Некоторые фреймворки (например, Django) имеют список регулярных выражений и методов, которые будут опробованы по порядку. Например, / john / q / smith, /john/ndom.*‹/smith, /john/ оформления. «/ john / henry / smith» соответствует второму и третьему, но второе будет отправлено, потому что это первое найденное совпадение.

Возможно ли это в JAX-RS или нет присущего порядку классов и методов? Для /john/ndom.*‹/ndom.*} вам нужно написать регулярное выражение, которое означает / john / everything / everythingbutsmith? Вам придется менять его каждый раз, когда вы меняете другие.

1 Ответ

2 голосов
/ 02 декабря 2009

Существует четко определенный алгоритм, его описывает раздел 3.7.1 спецификации JAX-RS. Честно говоря, я нахожу объяснение довольно непрозрачным - поэтому, читая его, я не могу ответить на ваш вопрос.

Однако я только что нашел CXF обзор алгоритма выбора, и это, кажется, указывает на то, что правила приоритета действительно позволяют вам делать то, что вы хотите.

...