#java #spring #spring-mvc
#java #spring #spring-mvc
Вопрос:
Что это значит, когда двойная звездочка присутствует в сопоставлении запроса? Например
@RequestMapping(value = { "/", "/welcome**" }, method =
RequestMethod.GET) public ModelAndView welcomePage() { ...
Ответ №1:
Общепринятые звездочки (в роли подстановочного знака) означают
/welcome*
: все, что находится в ЭТОЙ папке или разделе URL, которое начинается с "/welcome"
и заканчивается перед следующим "/"
подобным /welcomePage
.
/welcome**
: любой URL, начинающийся с "/welcome"
, включая вложенные папки и подразделы шаблона URL, такого как /welcome/section2/section3/
или /welcomePage/index
.
/welcome/*
: любой файл, папка или раздел внутри приветствуются (перед следующим "/"
), как /welcome/index
.
/welcome/**
: приветствуются любые файлы, папки, разделы, вложенные папки или подразделы внутри.
Другими словами, одна звездочка * заканчивается перед следующей "/"
, две звездочки ** не имеют ограничений.
Ответ №2:
-
Порядок сопоставления URL-адресов. Из Spring Docs:
Когда URL-адрес соответствует нескольким шаблонам, сортировка используется для поиска наиболее конкретного соответствия.
Шаблон с меньшим количеством переменных URI и подстановочных знаков считается более специфичным. Например, /hotels/{отель}/* имеет 1 переменную URI и 1 подстановочный знак и считается более конкретным, чем /hotels /{отель} /**, который имеет 1 переменную URI и 2 подстановочных знака
…
Существуют также некоторые дополнительные специальные правила:
- Шаблон сопоставления по умолчанию /** менее специфичен, чем любой другой шаблон. Например, /api/{a}/ {b} / {c} является более конкретным.
- Шаблон префикса, такой как /public/**, менее специфичен, чем любой другой шаблон, который не содержит двойных подстановочных знаков. Например, /public/path3/{a} / {b} / {c} является более конкретным.
Комментарии:
1. Тогда в чем разница в случае использования
/welcome**
и/welcome*
? В обоих случаях путь/welcome/ftp
или/welcome/ftp/index
является незаконным.2.
**
означает ноль или более символов, где он также может содержать разделитель путей/
. Держу пари, что это может сработать для упомянутых путей, но/welcome/**
было бы лучше.