在Spring Boot控制器中如何获取给定路径的URL?

3
在Thymeleaf中,我们有:
<a th:href="@{/somepath}">Link</a>

变成:

<a href="http://hostname:port/somepath">Link</a>

我希望在控制器中获取给定路径的完整URL,例如:

@GetMapping(path="/")
public String index(SomeInjectedClass cls) {
    String link = cls.someMethod('/somepath');
    // expected, link = http://hostname:port/somepath
    return "index";
}

@GetMapping(path="/home")
public String home(SomeInjectedClass cls) {
    String link = cls.someMethod('/somepath');
    // expected, link = http://hostname:port/somepath
    return "home";
}
编辑后 这个问题可以理解为:
public static String APPLICATION_BASE_URL = "http://hostname:port";
function someMethod(String method){
    return APPLICATION_BASE_URL + method;
}

我认为APPLICATION_BASE_URL很难看,因为我可以在任何地方部署它。 我想知道是否有一个漂亮的函数在Spring Boot甚至Java中可以获取我的应用程序的基本URL。


这个帖子回答了我的问题,尽管看起来有点丑。 - smftr
2个回答

4

使用HttpServletRequest来完成此操作。

@GetMapping(path="/")
public String index(HttpServletRequest httpServletRequest) {
    String link = httpServletRequest.getRequestURL();
    return "index";
}

这将返回我的当前URL在这些映射中。我想要获取另一个路径。 - smftr
你说的“另一条路径”是什么意思? - pvpkiran
我修改了我的问题,这两个映射中的链接将具有相同的值。 - smftr
我点赞了这个答案,因为它回答了今天提出的问题(尽管发布者实际上想要其他东西)。PS实际上它回答了发布者的问题! 它帮助我解决了我的问题。谢谢@pvpkiran - t0r0X

0

以下一行代码应该可以正常工作。

ServletUriComponentsBuilder.fromCurrentContextPath().path("/newPath").toUriString();

或者

ServletUriComponentsBuilder.fromCurrentContextPath().replacePath("/newPath").toUriString();

这只会追加路径。我认为TO想要一个替换过程。 - Snickbrack
@Snickbrack,请检查问题的编辑部分和示例。这个解决方案提供了与OP所要求的相同的结果。 - Sastrija
不,我已经测试过了,.path 方法会将 /newPath 添加到路径末尾而不是替换它。 - Snickbrack
@Snickbrack,我在我的端上尝试时得到了预期的结果。你可以尝试使用.replacePath()而不是.path() - Sastrija

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接