HTTP Status 500 - Session attribute 'user' required - not found in session异常产生的原因&解决方法

发生错误的例子如下:

@SessionAttributes(value = {"user"},types = {String.class})//该注解只能放在类上,而不能够放在方法上边
@RequestMapping("/springmvc")
@Controller
public class HelloWorld {
@RequestMapping("/testModelAttribute")
   public String testModelAttribute(User user){
       System.out.println("修改: "+user);
       return "success";
   }
}

原因是当前的 Handler 使用了 @SessionAttributes 注解修饰,   若使用了该注解, 且 @SessionAttributes 注解的 value 属性值中包含了 key, 则会从 HttpSession 中来获取 key 所
 对应的 value 值, 但是当前您HttpSession并没有相应的对象,所以会抛出异常。

解决方案有2,

其一:

@SessionAttributes(value = {"user"},types = {String.class})//该注解只能放在类上,而不能够放在方法上边
@RequestMapping("/springmvc")
@Controller
public class HelloWorld {
@RequestMapping("/testModelAttribute")
   public String testModelAttribute(@modelAttribute("abc")User user){
       System.out.println("修改: "+user);
       return "success";
   }
}
或者:

@SessionAttributes(value = {"abc"},types = {String.class})//该注解只能放在类上,而不能够放在方法上边
@RequestMapping("/springmvc")
@Controller
public class HelloWorld {
@RequestMapping("/testModelAttribute")
   public String testModelAttribute(User user){
       System.out.println("修改: "+user);
       return "success";
   }
}
POJO属性名称和@SessionAttributes中的数据要不一致,让springmvc重新创建一个对象,坏处是会丢失掉原有对象的信息。

其二:

添加@ModelAttribute:

 @ModelAttribute
    public void getUser(@RequestParam(value = "id",required = false) Integer id,Map<String,Object> map){
        if (id!=null){
            User user=new User(1,"Tom","12346","hat@nskdnsdk.com",12);//假设是从数据库中获取的对象
            System.out.println("从数据库中获取一个对象:"+user);//把从数据库中获取的对象放到map中
            map.put("user",user);
        }
    }



这个例子中创建了一个user对象,并且放到了HttpSession域中,所以当提交表单的时候就可以从session域中取出这个键所对应的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值