Spring Boot项目中通过ModelAndView传递URL至Thymeleaf页面的跳转异常问题求助
解决ModelAndView传递外部URL到Thymeleaf的跳转问题
嘿,我来帮你搞定这个跳转问题!
你遇到的核心问题是:外部URL缺少协议前缀(http/https),而且Thymeleaf的语法用错了场景,导致浏览器把它当成了相对路径来处理。
问题原因拆解
- 你后端设置的
google变量是www.google.com,没有带https://或者http://,浏览器会默认把它当成当前页面的相对路径,所以就和当前的http://localhost:8080/api/拼接成了http://localhost:8080/api/www.google.com。 - 你用的
@{{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
相关产品推荐
相关产品推荐

