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

Spring MVC使用@SessionAttribute报错:HomeController Bean创建失败

问题分析与解决方案

错误原因

  1. @SessionAttribute强制要求属性存在:使用@SessionAttribute("email") String email时,该注解默认required=true,若session中无"email"属性,Spring会直接抛出异常,与你想处理空值的逻辑冲突。
  2. 局部变量与参数重名:方法内部重新定义String email,和方法参数的email同名,引发编译错误,进而导致Bean创建失败。
  3. 不必要的@Transactional注解:该方法仅处理session与视图数据,无数据库操作,添加@Transactional会让Spring尝试生成代理类,可能引发方法解析失败。

修正后的代码

@Controller
@RequestMapping("/")
public class HomeController {
    @GetMapping
    public String defaultPage(HttpSession httpSession, ModelMap modelMap) {
        String email = (String) httpSession.getAttribute("email");
        if(email != null) {
            String character = email.substring(0, 1);
            modelMap.addAttribute("character", character);
        }
        return "home";
    }
}

关键调整说明

  • 移除@SessionAttribute("email")参数,改用HttpSession.getAttribute()主动获取,session为空时不会抛出异常,可正常执行空值判断逻辑。
  • 删除方法内重复定义的email变量,直接使用从session获取的变量。
  • 去掉不必要的@Transactional注解,避免代理类生成问题。
  • 修正拼写错误:chacracter改为character,防止视图层取值出错。

内容的提问来源于stack exchange,提问作者do hai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:43:10