Spring Boot中FreeMarker报变量null或缺失错误的原因排查
错误原因分析
以下是可能导致FreeMarker模板提示name变量为null或缺失的几个常见原因:
Controller未将请求参数传递到模板模型
如果你的Controller方法仅返回模板名称,没有从请求中获取name参数并将其添加到Model/ModelMap/ModelAndView中,模板就无法访问到该变量。例如:@GetMapping("/signup") public String showSignup() { // 未处理请求参数name,也未添加到模型 return "signup"; }这种情况下,即使URL携带了
name参数,模板仍然会找不到该变量。参数名称或模型键名不匹配
若Controller中接收的参数名称与请求参数不一致,或者将参数存入模型时使用的键名和模板中引用的键名不匹配,也会导致报错。比如:- Controller接收的是
username而非name:public String showSignup(@RequestParam("username") String name) - 存入模型时用了错误的键:
model.addAttribute("username", name),但模板里用的是${name}
- Controller接收的是
FreeMarker启用了严格语法配置
如果Spring Boot配置中开启了spring.freemarker.settings.strict_syntax=true,FreeMarker会对不存在的变量直接抛出错误,而不是默认显示空字符串。此时即使参数存在但未传递到模型,也会触发该报错。模板文件加载异常
若模板文件不在默认的src/main/resources/templates目录下,或者存在重名模板导致加载了未正确引用变量的旧版本,同样会出现变量缺失的提示。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

