#java #spring #model-view-controller
#java #spring #model-view-controller
Вопрос:
Предположим, у вас есть контроллер Spring MVC, что-то вроде этого
@Controller
public class RestController {
@GetMapping(value = "/test")
public @ResponseBody Test getTestData(...) {
// console log path to controller: http://localhost:80/app/test
return testData;
}
}
Возможно ли войти / распечатать из контроллера URL-адрес к нему? В приведенном выше примере вывод будет выглядеть примерно так https://localhost:80/app/test
Использование .getRequestUrl
из сервлета работает некорректно.
Комментарии:
1. » Использование
.getRequestUrl
из сервлета ведет себя некорректно. » — Каков фактический и ожидаемый результат?2. Не уверен, чего вы пытаетесь достичь, вы можете получить IP-адрес сервера из запроса, вы должны знать имя приложения / контекста, и вы знаете вызванный api, почему вы не можете создать требуемый URL
3. Вы можете передавать константы в качестве значений аннотаций. Вы можете создать URL-адрес на основе нескольких констант, таких как (domain restBasePath instancePath (подпуть))… Spring не смог определить ваш абсолютный путь, и вы должны знать относительный путь лучше, чем он.
4. @Turing85 с помощью
.getRequestUrl
я получаю ссылку на jsp что-то вродеhttp://localhost:80/WEB-INF/view/.../test.jsp
, чего я не хочу. Я хочу ссылку на контроллер.5. У вашего контроллера нет никакого пути, установленного в примере кода… У самого GetMapping есть сопоставление…
Ответ №1:
Вы можете ввести UriComponentsBuilder в качестве параметра, а затем использовать метод toUriString(). Из документации следует, что он используется для создания относительного URI из текущего запроса, это должно работать так, как ожидается в вашем документе.
@Controller
public class RestController {
...
@GetMapping(value = "/test")
public @ResponseBody Test getTestData(UriComponentsBuilder ucb, ...) {
LOGGER.debug(ucb.toUriString());
// console log path to controller: http://localhost:80/app/test
return testData;
}
...
}