Spring @RequestMapping "Не содержит" Regex - PullRequest
0 голосов
/ 24 августа 2018

У меня есть это RequestMapping:

    @RequestMapping(value = "/route/to-{destination}-from-{departure}.html", method = {RequestMethod.GET, RequestMethod.HEAD})

И я хотел бы добавить это RequestMapping:

    @RequestMapping(value = "/route/to-{destination}.html", method = {RequestMethod.GET, RequestMethod.HEAD})

Таким образом, он может обслуживать все маршруты "без отправления". Это, однако, создает конфликт, поскольку URL-адрес «/ route / to-destination-from-destination» также соответствует этому второму RequestMapping ... Достаточно справедливо, поэтому я решил указать регулярное выражение:

    @RequestMapping(value = "/route/to-{destination:^((?!-from-).)+}.html", method = {RequestMethod.GET, RequestMethod.HEAD})

Так что RequestMapping не будет совпадать, если «destination» содержит «-from -».

И ... это не работает! URL-адрес "/route/to-barcelona-from-paris.html" успешно обрабатывается первым RequestMapping, но URL-адрес "/route/to-barcelona.html" вообще не обрабатывается ... Чего мне не хватает?

Примечания. Я бы не хотел использовать решение Java, такое как наличие единственного "/ route / to- {destination}" RequestMapping, а затем проверка, содержит ли "destination" "-from-" .. :) Также я могу изменить эти маршруты из-за SEO ...

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Вы можете использовать

"/route/to-{destination:(?!.*-from-).+}.html"

Якорь ^ будет искать начало строки и не найдет здесь ни одного совпадения.

Отрицательный запрос (?!.*-from-) приведет к сбою любоговходные данные, которые содержат -from- после любых 0+ символов, кроме символов разрыва строки.

Шаблон .+ будет использовать все 1 или более символов, кроме символов разрыва строки, до конца строки.

0 голосов
/ 24 августа 2018

попробуйте использовать это: ->

{назначения: ^ (?! от) +}

или

{назначения: ^ (?!. (- с -)) +}

...