Как сопоставить только пути в / [^ /] + с Spring @RequestMapping? - PullRequest
1 голос
/ 30 марта 2019

Мне нужно следующее:

Любой запрос к

и т. Д., Следует пересылать на

https://localhost:8443/a/web/index.html

Вот как мне удалось это сделать:

@Controller
public class ForwardController {
    @RequestMapping(value = "/*", method = RequestMethod.GET)
    public String redirectRoot(HttpServletRequest request) {
        return "forward:/a/web/index.html";
    }
}

Проблема:

Это также соответствует https://localhost:8443/api/ (обратите внимание на / в конце).

Это проблема, потому что я хочу, чтобы базовый путь Spring Data REST был:

spring.data.rest.base-path=/api/

/api != /api/ когда дело доходит до конечных точек REST.

Что должно работать, но как-то не так

Я пробовал несколько разных регулярных выражений, но я все еще не могу выполнить то, что хочу. Например ( демо ):

@RequestMapping(value = "/[^/]+", method = RequestMethod.GET)

Теперь будет работать для Spring Data - я получаю всю информацию о ресурсах, которую ожидаю, но доступ к https://localhost:8443/ теперь нарушен, и веб-клиент больше не может быть доступен.

То же самое относится и к

@RequestMapping(value = "/{path}", method = RequestMethod.GET)
@RequestMapping(value = "/{path:[^/]+}", method = RequestMethod.GET)

, который ведет себя как /* (также соответствует следующему /).

Эта проблема преследует меня уже несколько недель, но до сих пор не удалось найти решения.


Весь этот вопрос также можно рассматривать как:

Почему "/[^/]+" не соответствует https://localhost:8443/whatever?

1 Ответ

0 голосов
/ 31 марта 2019

Регулярные выражения обычно не самая быстрая вещь, чтобы попробовать.Вы можете отправить список путей к

 @RequestMApping(value={"", "/", "/test", "/api"},  method = RequestMethod.GET)

См. Несколько аннотаций Spring @RequestMapping

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