Spring Boot+Thymeleaf模板解析报错,无法读取Model数据求助
核心定位
既然注释<tbody>后页面能正常加载,且数据接口能正常返回用户数据,100%是<tbody>内部的Thymeleaf语法/数据引用出了问题,直接聚焦这块代码排查即可。
具体排查点
循环语法错误
检查th:each的写法是否规范,比如是不是误写成<tr th:each="user in ${users}">(正确语法是用:而非in);另外要确认迭代的集合是否为null——如果UserService返回的是null而非空集合,Thymeleaf会直接报错,建议返回Collections.emptyList()代替null。实体属性与getter不匹配
模板里用${user.username}这类表达式时,要严格对应User实体类的定义:- 属性名必须完全一致(比如实体是
private String userName,模板不能写${user.username}) - 必须存在符合JavaBean规范的getter方法(比如属性是
email,getter得是getEmail(),不能随意命名)
- 属性名必须完全一致(比如实体是
变量名引用不匹配
核对Controller传到模板的变量名和模板里的是否一致:比如Controller里是model.addAttribute("userList", userService.list()),模板里却写th:each="user : ${users}",变量名不匹配会导致找不到数据,触发解析异常。语法遗漏或格式错误
检查<tbody>内的标签是否有未闭合、符号缺失的情况,比如<td th:text="${user.name}少了闭合的}",或者误用了中文引号,这类小错误会直接导致模板解析失败。特殊字符未处理
如果用户数据里包含<、>、&这类特殊字符,用th:text输出没问题,但如果用原生HTML输出(比如th:utext或者直接写${user.content}),会破坏HTML结构,引发解析异常。
快速排查技巧
- 查看控制台的完整异常栈信息,Thymeleaf会明确标注错误发生的行号(比如
Exception processing template "users": Error during execution of processor 'org.thymeleaf.processor.element.AbstractAttributeTagProcessor' (template: "users" - line 20, col 10)),直接定位到该行排查。 - 把
<tbody>内的代码简化到最简:比如只保留<tr th:each="user : ${users}"><td th:text="${user.id}"></td></tr>,如果能正常运行,再逐步添加其他字段,定位是哪个字段出了问题。
内容的提问来源于stack exchange,提问作者negbi2

