Spring MVC使用@SessionAttribute报错:HomeController Bean创建失败
问题分析与解决方案
错误原因
- @SessionAttribute强制要求属性存在:使用
@SessionAttribute("email") String email时,该注解默认required=true,若session中无"email"属性,Spring会直接抛出异常,与你想处理空值的逻辑冲突。 - 局部变量与参数重名:方法内部重新定义
String email,和方法参数的email同名,引发编译错误,进而导致Bean创建失败。 - 不必要的@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
相关产品推荐
相关产品推荐

