Spring Boot Thymeleaf不同@GetMapping路径渲染不一致问题
问题原因与解决方案
核心问题:相对路径导致静态资源加载失败
当访问/user/object/{identifier}这类多层级URL时,页面中未以斜杠开头的资源引用会被解析为相对当前URL的路径,而非根路径。比如@{assets/jquery-treetable/jquery.treetable.css}会被解析成/user/object/assets/jquery-treetable/jquery.treetable.css,而这个路径下不存在静态资源,导致样式、JS加载失败,最终页面渲染异常。
修复步骤
1. 修正所有静态资源的引用路径
将模板中所有资源引用的相对路径改为根路径开头(添加前置斜杠/):
<!-- 修正CSS引用 --> <link th:rel="stylesheet" th:href="@{/assets/jquery-treetable/jquery.treetable.css}"/> <link th:rel="stylesheet" th:href="@{/assets/jquery-treetable/jquery.treetable.theme.default.css}"/> <link th:rel="stylesheet" th:href="@{/webjars/bootstrap/4.0.0-2/css/bootstrap.min.css}"/> <!-- 修正JS引用 --> <script th:src="@{/webjars/jquery/jquery.min.js}"></script> <script th:src="@{/webjars/popper.js/umd/popper.min.js}"></script> <script th:src="@{/webjars/bootstrap/js/bootstrap.min.js}"></script> <script th:src="@{/assets/jquery-treetable/jquery.treetable.js}"></script>
2. 优化AJAX请求路径(可选但推荐)
将AJAX中的固定URL改为Thymeleaf生成的根路径形式,避免后续URL结构变化时再次出错:
$.ajax({ "type": 'get', "url": /*[[@{/tree/9d317daca74246d4be41b1a37e30ee2a}]]*/ '', "dataType": "json", "success": function (data) { $.each(data, function (idx, obj) { $("#treeTable").append("<tr data-tt-id=\"" + obj.nodeId + "\" data-tt-parent-id=\"" + obj.parent + "\"><td>" + obj.subjectShort + "</td><td>" + obj.predicate + "</td><td>" + obj.object + "</td></tr>"); }); $("#treeTable").treetable({ expandable: true, initialState: "expanded", clickableNodeNames: true, indent: 30 }); } });
3. 验证效果
重新启动项目后,访问/user/object/{identifier}路径,检查浏览器控制台是否还有404的资源加载错误,确认样式和树形表格功能正常渲染。
内容的提问来源于stack exchange,提问作者naturzukunft
相关产品推荐
相关产品推荐

