Двойная звездочка при сопоставлении запроса

#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:

  1. Пути муравьев

  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/** было бы лучше.