我有一个带有@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属性,以建立到我的服务的链接?
答案 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")