Ну, вы сделали очень хорошую мысль. Так оно и есть (Вот так оно и задумано).
Но, может быть, я могу дать некоторые внутренние детали. Это то, что я нашел после отладки AntPathMatcher::match
.
Причина, по которой matcher.match(patter1, path2)
является ложным ===> /
считается разделителем пути по умолчанию. Так что метод match
делает внутренне, чтобы разделить его, используя /
в качестве разделителя, и посмотреть, совпадают ли все токены. Но, в конце концов, есть строка сравнения, подобная этой
return (pattern.endsWith(this.pathSeparator) == path.endsWith(this.pathSeparator));
Который в основном проверяет, заканчивается ли и шаблон, и путь /
или нет. Следовательно, вы становитесь ложными.
Причина, по которой matcher.match(patter2, path2)
является верным ===> Что ж, все становится сложно, когда используется подстановочный знак **
. Если используется подстановочный знак, то логика такова, что изначально токены сопоставляются до **
. После обнаружения он проверяет токены с последнего до последнего появления **
. В этом случае нет проверки на трейлинг /
. Это главная причина, по которой это работает.
Может быть, это ошибка. Так что причина этого случая в том, что подстановочный знак.