Как получить путь внутри @GetMapping из другого сервиса - PullRequest
0 голосов
/ 13 марта 2019

У меня есть контроллер rest с аннотацией @GetMapping для отображения HTTP-запросов на определенные методы-обработчики:

@RestController
class Handler(){
    @GetMapping(path = ["method"])
    fun handlerMethod(){
        //...
    }
}

Также у меня есть служба электронной почты, где мне нужно отправить электронное письмо со ссылкой на мою конечную точку (в этом случае http://host/method)

@Service
class EmailService(val config: Config){

    fun sendEmail(){
        // send "config.baseUrl/${getMethodPath()}"
    }

    fun getMethodPath(){
        //todo
    }
}

Здесь я получаю базовый URL из конфигурации (http://host). Есть ли способ получить атрибут пути в EmailService из @GetMapping от Handler для ссылки на сборку для моего сервиса?

Ответы [ 3 ]

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

вы можете получить запрос, привязанный к текущему потоку, по RequestContextHolder.

((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()

Приведенный выше код получит HttpServletRequest, а затем вы можете использовать [HttpServletRequest#getPathInfo()][1]чтобы получить path URL

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

Spring поддерживает только выполнение этой задачи. В методе вашего контроллера передайте параметр типа UriComponentsBuilder. Этот компоновщик будет иметь всю информацию о текущей маршрутизации запросов (имя хоста, порт, путь и т. Д.). Затем вы можете использовать MvcUriComponentsBuilder, чтобы Spring создал необходимую ссылку (Java, но она должна быть эквивалентна в Kotlin):

MvcUriComponentsBuilder.relativeTo(builderParameter)
    .fromMethod(Handler.class, "method")
0 голосов
/ 13 марта 2019

Вы можете получить информацию о пути из объекта HttpServletRequest.Проверьте это:

Как получить URL-адрес запроса в Spring Boot RestController

Если вы не получаете точный путь, проверьте это для разных подходов, чтобы получить пути:
В чем разница между методами getRequestURI и getPathInfo в HttpServletRequest?

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