问答

在session存入的是对象,为什么取出来变成了字符串?

作者:admin 2021-04-20 我要评论

在 setUser 方法中把 User 对象存入session,在同一个方法中获取 user 没问题,但是在 getUser 方法中拿到 user ,强转就会报错,整了半天没找到原因,哪位大神...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

setUser方法中把User对象存入session,在同一个方法中获取user没问题,但是在getUser方法中拿到user,强转就会报错,整了半天没找到原因,哪位大神可以解惑?

项目是前后端分离的,用nginx做代理进行请求跳转,难道有代理的时候session中的值就转成了字符串吗???

我没有在前端操作session,只是在后端存了user,再取出user

@Controller
public class Test {
    @GetMapping("/setUser")
    @ResponseBody
    public User setUser(HttpServletRequest request) {
        User user = new User("李逵", 20);
        HttpSession session = request.getSession();
        session.setAttribute("user", user);
        // 在当前方法中拿取user不会报错
        User user = (User) session.getAttribute("user");
        return user;
    }

    @GetMapping("/getUser")
    public String getUser(HttpServletRequest request) {
        HttpSession session = request.getSession();

        // 这里强转为User会报错:java.lang.String can not cast to Uesr
        User user = (User) session.getAttribute("user");

        return "ok";
    }
}

image.png

###

可能有其他地方设置了一个字符串的session
先去掉强转,或者debug进,看一下取到了什么

###

可以看下是否重写了toString方法

###

不太清除java。说一下我的猜想。
在写入session的时候。User可能存在一些隐形输出,例如toString或类似的,将对象转字符串。最终session存储的是字符串。因为session只支持字符串存储。

读的时候session自然读出的是字符串。

存储时候建议将内容序列化。读在反序列化。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器