说明
我知道这个问题已经很老了,但这是我发现的唯一一个关于这个主题的问题,所以我想为未来的访问者分享我的方法。
如果您想从 WebRequest 中获取基本 URL,您可以执行以下操作:
ServletUriComponentsBuilder.fromRequestUri(HttpServletRequest request);
这将为您提供方案(“http”或“https”)、主机(“example.com”)、端口(“8080”)和路径(“/some/path”),而fromRequest(request)也会给你查询参数。但由于我们只想获取基本 URL(方案、主机、端口),我们不需要查询参数。
现在您可以使用以下行删除路径:
ServletUriComponentsBuilder.fromRequestUri(HttpServletRequest request).replacePath(null);
TLDR
最后,我们获取基本 URL 的单行代码如下所示:
//request URL: "http://example.com:8080/some/path?someParam=42"
String baseUrl = ServletUriComponentsBuilder.fromRequestUri(HttpServletRequest request)
.replacePath(null)
.build()
.toUriString();
//baseUrl: "http://example.com:8080"
加法
如果你想在控制器之外或没有HttpServletRequest 的地方使用它,你可以替换
ServletUriComponentsBuilder.fromRequestUri(HttpServletRequest request).replacePath(null)
与
ServletUriComponentsBuilder.fromCurrentContextPath()
这将通过spring的RequestContextHolder获得HttpServletRequest。您也不需要replacePath(null),因为它已经只有方案、主机和端口。