如何从其他服务获取@GetMapping内部的路径

时间:2019-03-13 17:08:02

标签: java spring spring-boot spring-mvc kotlin

我有一个带有@GetMapping批注的rest控制器,用于将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
    }
}

在这里,我从配置(http://host)获取基本URL。有什么方法可以从Handler的@GetMapping获取EmailService中的path属性,以建立到我的服务的链接?

3 个答案:

答案 0 :(得分:0)

您可以从HttpServletRequest对象获取路径信息。请检查以下内容:

How to get request URL in Spring Boot RestController

如果您没有获得确切的路径,请检查此方法以获取路径的不同方法:
What's the difference between getRequestURI and getPathInfo methods in HttpServletRequest?

答案 1 :(得分:0)

您可以通过RequestContextHolder将请求绑定到当前线程。

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

上面的代码将获得HttpServletRequest,然后您可以使用[HttpServletRequest#getPathInfo()][1]获得URL的path

答案 2 :(得分:0)

Spring仅支持执行此任务。在您的控制器方法中,传递类型为UriComponentsBuilder的参数。该构建器将具有有关当前请求路由的所有信息(主机名,端口,路径等)。然后,您可以使用MvcUriComponentsBuilder来让Spring构造所需的链接(Java,但在Kotlin中应该等效):

MvcUriComponentsBuilder.relativeTo(builderParameter)
    .fromMethod(Handler.class, "method")