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

Spring MVC使用@SessionAttribute报400错误:客户端请求语法不正确

问题解决:Spring MVC @SessionAttribute导致400 Bad Request错误

你的问题出在@SessionAttribute的默认行为上:这个注解默认required=true,也就是强制要求会话中必须存在名为email的属性。当你第一次访问login路径时,会话里还没有存入email值,Spring MVC就会判定请求不合法,直接返回400错误。

解决方法:

  • 方法一:设置required为false
    修改注解,允许会话中不存在email属性,这样即使没有值也不会报错:

    @Controller
    @RequestMapping("login/")
    public class LoginController {
        
        @GetMapping
        public String Default(@SessionAttribute(value = "email", required = false) String email) {
            if(email != null){
                System.out.println(email);
            }
            return "login";
        }
    }
    
  • 方法二:通过HttpSession手动获取属性
    直接注入HttpSession对象,手动获取会话属性,这种方式更灵活:

    @Controller
    @RequestMapping("login/")
    public class LoginController {
        
        @GetMapping
        public String Default(HttpSession session) {
            String email = (String) session.getAttribute("email");
            if(email != null){
                System.out.println(email);
            }
            return "login";
        }
    }
    

补充说明

移除@SessionAttribute后,控制器方法没有了强制获取会话属性的要求,自然能正常跳转视图。如果业务上确实需要确保email存在,那应该先在其他流程中把email存入会话,再访问这个接口。

内容的提问来源于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 11:03:11