Spring RequestMapping Regex для исключения строки - PullRequest
1 голос
/ 03 октября 2019

Справочная информация : я пытаюсь создать серверную часть для веб-клиента «Одностраничное приложение», который перенаправляет все запросы к точке входа index.html, за исключением всего, что указано в /assets/. "/" сопоставлен с /index.html в ResourceHandler и работает нормально.

Проблема : я хочу сопоставить все пути, которые не начинаются с '/ assets /', сRequestMapping весной. Это работает, если я положительно сопоставляю «активы», но не, если я отрицательно сопоставляю «активы» в регулярном выражении.

@ControllerAdvice
@RequestMapping(value="/**")
public class SPARouter {

    @RequestMapping(value = {"/{path:(?!assets)}/**"}, method = RequestMethod.GET)
    public String router() {
        return "forward:/";
    }

}

Приведенный выше код не работает, поскольку он никогда не соответствует ни одному URL. Если я заменим "/{path:(?!assets)}/**" на "/{path:assets}/**", он будет соответствовать URL-адресу, подобному /assets/...

. То, что не работает, - это отрицательный взгляд / совпадение в регулярном выражении.

можно ли таким образом отрицательно сопоставить шаблон?

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Я не слишком уверен насчет отрицательного соответствия ...

Но для вашей конкретной проблемы (перенаправление на / для всего, кроме чего-то), решение, которое я успешно использовал, - это перехватчик. Перехватчик проверяет URL-адрес, пересылает при необходимости и, если нет, не делает.

0 голосов
/ 03 октября 2019

Попробуйте использовать ^ в отображении, как показано ниже

@RequestMapping(value = {"/{path:^(?!assets)}/**"}, method = RequestMethod.GET)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...