You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot项目中通过ModelAndView传递URL至Thymeleaf页面的跳转异常问题求助

解决ModelAndView传递外部URL到Thymeleaf的跳转问题

嘿,我来帮你搞定这个跳转问题!

你遇到的核心问题是:外部URL缺少协议前缀(http/https),而且Thymeleaf的语法用错了场景,导致浏览器把它当成了相对路径来处理。

问题原因拆解

  1. 你后端设置的google变量是www.google.com,没有带https://或者http://,浏览器会默认把它当成当前页面的相对路径,所以就和当前的http://localhost:8080/api/拼接成了http://localhost:8080/api/www.google.com。
  2. 你用的@{{link}(link=${google})}是Thymeleaf用来处理内部路径变量的语法(比如/user/{id}这种动态路由),它会基于应用上下文生成URL,不适合直接跳转到外部网站。

两种解决方案

方案一:后端直接补充协议前缀

在后端给URL加上https://,这样前端拿到的就是完整的绝对URL:

@RequestMapping("/api/test")
public ModelAndView test(){
    ModelAndView modelAndView = new ModelAndView();
    // 补充https协议前缀
    String google = "https://www.google.com";
    modelAndView.addObject("google", google);
    modelAndView.setViewName("api/googleTest");
    return modelAndView;
}

然后前端按钮直接引用变量即可:

<button class="w-100 btn btn-secondary btn-lg" type="button" th:onclick="|location.href='${google}'|">

方案二:前端补充协议前缀(如果后端无法修改)

如果后端不能直接修改URL,也可以在Thymeleaf里直接拼接协议:

<button class="w-100 btn btn-secondary btn-lg" type="button" th:onclick="|location.href='https://${google}'|">

这样点击按钮后,浏览器就会识别出这是一个外部绝对URL,直接跳转到谷歌官网啦!

内容的提问来源于stack exchange,提问作者Adam Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 09:17:35