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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:42:01