H5W3
当前位置:H5W3 > 其他技术问题 > 正文

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

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自然读出的是字符串。

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

本文地址:H5W3 » 在session存入的是对象,为什么取出来变成了字符串?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址