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

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

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试