一、直接访问控制器
@RequestMapping("login")
public String login(User user, HttpSession session){
User loginedUser = userServiceImpl.login(user);
System.out.println(loginedUser);
if(loginedUser != null){
session.setAttribute("user", user);
return "redirect:/main.jsp";
} else {
session.setAttribute("error", "用户名或密码错误");
return "redirect:/index.jsp";
}
}
直接访问控制器时,控制台输出loginedUser对象正常
之后存入session中,在前端取出时数据异常
二、使用ajax获取
@RequestMapping("showUser")
@ResponseBody
public User showUser(HttpSession session){
User user = new User();
user.setUname("张三");
user.setPwd("123");
User loginUser = userServiceImpl.login(user);
session.setAttribute("user", loginUser);
return loginUser;
}
JS代码:
$(function () {
$.post({
url: 'showUser', dataType: 'json', success: function (data) {
alert("data.id:" + data.id + "\n"
+ "data.uname:" + data.uname + "\n"
+ "data.pwd:" + data.pwd + "\n"
+ "data.rid:" + data.rid + "\n"
+ "data.menus:" + data.menus);
}
});
});
结果:
并且通过ajax方式存入的session缓存中的数据也是正确的:
疑惑
两种方式都是调用的同一个service对象的同一个方法,返回的对象也是一样的,为什么直接访问控制器存入session中,在前端获取数据时就会发生异常呢?应该怎么解决?