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

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);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型