URL-адрес для входа в Spring controller изнутри него

#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;
    }
...
}