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
相关产品推荐
相关产品推荐

