使用Thymeleaf构造URL传递多路径变量时参数未解析如何解决
错误原因
Thymeleaf 的 URL 表达式 @{} 不支持将路径变量的赋值逻辑紧跟在对应占位符之后,你当前的写法中(username = ${username})会被识别为URL路径的普通字符串片段,而不是变量赋值规则,所以才会出现占位符未解析直接编码输出的问题。
最优实现方案
方案1:保持路径变量传递逻辑,修正Thymeleaf写法
所有路径变量的赋值规则需要统一放在URL末尾的同一对括号内,多个变量用逗号分隔即可,修正后的th:href代码如下:
th:href="@{/api/supplier/getSupplierViewItem/{username}/{itemCode}(username=${username}, itemCode=${item.itemCode})}"
该写法完全匹配你现有的Spring MVC接口,不需要修改后端代码,框架会自动将变量值填充到对应路径占位符中,生成符合预期的请求URL。
方案2:改用请求参数传递(适合参数较多的扩展场景)
如果后续可能新增传递参数,可以选择更灵活的Query参数传递方式,无需在路径中预定义占位符:
Thymeleaf 代码调整为:
th:href="@{/api/supplier/getSupplierViewItem(username=${username}, itemCode=${item.itemCode})}"
对应Spring MVC接口调整为:
@GetMapping("/getSupplierViewItem") public String getSupplierViewwithItem(@RequestParam("username") String username, @RequestParam("itemCode") String itemCode, ModelMap model){ model.addAttribute("username", username); model.addAttribute("itemCode", itemCode); return "createSupplier"; }
该方式无需处理路径占位符的匹配规则,编码出错概率更低,适配性更强。
内容的提问来源于stack exchange,提问作者Jesús Navarro Hernández
相关产品推荐
相关产品推荐

