Перехватите все запрошенные пути в Springboot RestController

#java #spring-boot #spring-restcontroller

Вопрос:

Я ищу способ получить конечную точку в Springboot, которая улавливает все запросы, отправляемые на / нее . В идеале все, что находится позади / , должно быть передано в качестве строкового параметра.

Пример запроса может выглядеть так: http://myproxy.com/foo/bar?blah=blubb я попробовал RestController для /

 @RestController
public class ProxyRestController {

    @RequestMapping("/{restOfPath}", method = RequestMethod.GET)
    public ResponseEntity<String> handleGetRequests(@PathVarialbe("restOfPath") String path) {
        return ResponseEntity.of(Optional.of(""));
    }

}
 

Конечная точка не улавливает пример, потому что он будет перенаправлен в /foo/bar то /foo время как пойман.

Как бы я достиг конечной точки «поймать все» в SpringBoot? Это также может быть по-другому, чем @RestController мне просто нужно быть внутри компонента и отправить http-ответ обратно вызывающему абоненту.

Ответ №1:

Адаптируйте этот код в соответствии с вашим:

 @Controller
public class RestController {

@RequestMapping(value = "/**/{path:.*}")
public String index(final HttpServletRequest request) {
    final String url = request.getRequestURI();

    return "something";
}
}
 

Комментарии:

1. У вас также есть возможность обрабатывать некоторые конкретные URL-адреса внутри вашей функции с помощью этого кода: if (url.startsWith("/something")) { return "something"; }

2. В основном правило состоит в том, чтобы добавить регулярное выражение в качестве значения value параметра @RequestMapping аннотации

3. Я попытался добавить ваше регулярное выражение в сопоставление, но я все равно получаю 404, когда выполняю свой пример запроса

4. Это работает, когда я использую "/**/{path:.*}" , хотя, может быть, вы сможете исправить ответ, чтобы я мог его принять.