Joezeo
2019-09-15 11:47
采纳率: 100%
浏览 678
已采纳

SpringMVC: 前端用ajax方式可以获取session中的数据 直接访问控制器无法正确获取session中的数据?

一、直接访问控制器

    @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中,在前端获取数据时就会发生异常呢?应该怎么解决?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • Json-Huang 2019-09-15 12:11
    已采纳

    login方法中session.setAttribute应该传入 loginedUser;即
    把 session.setAttribute("user", user);改成 session.setAttribute("user", loginedUser);

    已采纳该答案
    打赏 评论

相关推荐 更多相似问题