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个回答

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐