#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:.*}"
, хотя, может быть, вы сможете исправить ответ, чтобы я мог его принять.