我先睡了qaq 2024-06-21 22:11 采纳率: 0%
浏览 1

如何把session返回的对象转为User类型

如何把session返回的对象转为User类型 问题代码如下 后台显示映射错误

public void submitOrder(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    HttpSession session = request.getSession();
    User user = (User) session.getAttribute("user");

    if (user==null){
        //没有登录
        response.sendRedirect(request.getContextPath() + "/login.jsp");
        return;
    }

    //目的:封装好一个Order对象传递给service层
    Order order = new Order();

    //1、private String oid;//该订单的订单号
    String oid = CommonsUtils.getUUID();
    order.setOid(oid);

    //2、private Date ordertime;//下单时间
    order.setOrdertime(new Date());

    //3、private double total;//该订单的总金额
    //获得session中的购物车
    Cart cart = (Cart) session.getAttribute("cart");
    double total = cart.getTotal();
    order.setTotal(total);

    //4、private int state;//订单支付状态1代表已付款 0代表未付款
    order.setState(0);

    //5、private String address;//收货地址
    order.setAddress(null);

    //6、private String name;//收货人
    order.setName(null);

    //7、private String telephone;//收货人电话
    order.setTelephone(null);

    //8、private User user;//该订单属于哪个用户
    order.setUser(user);

    //9、该订单中有多少订单项 List<OrderItem> orderItems = new ArrayList<OrderItem>();
    //获得购物车中的购物项的集合map
    Map<String,CartItem> cartItems = cart.getCartItems();
    for (Map.Entry<String,CartItem>entry:cartItems.entrySet()){
        //取出每一个购物项
        CartItem cartItem = entry.getValue();
        //创建新的订单项
        OrderItem orderItem =new OrderItem();
        //1、 private String itemid;//订单项的id
        orderItem.setItemid(CommonsUtils.getUUID());
        //2、private int count;//订单项内部商品的购买数量
        orderItem.setCount(cartItem.getBuyNum());
        //3、private double subtotal;//订单项小计
        orderItem.setSubtotal(cartItem.getSubtotal());
        //4、private Product product;//订单项内部的商品
        orderItem.setProduct(cartItem.getProduct());
        //5、private Order order;//该订单项属于哪个订单
        orderItem.setOrder(order);

        //将该订单项添加到订单的订单项集合中
        order.getOrderItems().add(orderItem);
    }

    //order对象封装完毕
    //传递数据到service层
    ProductService service = new ProductService();
    service.submitOrder(order);


}
  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-21 22:11
    关注

    引自免费微信小程序:皆我百晓生

    从你给出的代码来看,你正在尝试从session中获取用户信息并将其转换为User类型。你遇到的问题可能是类型转换错误,也就是说session.getAttribute("user")返回的对象无法直接转换为User类型。这可能是由于以下原因导致的:

    1. 你可能没有正确地实现User类或者你的User类并未被正确地序列化到session中。你需要确保User类是可以序列化的,并且你正确地实现了它的getter和setter方法。
    2. 你可能在session中存储的用户对象并不是User类型的实例,而是其他类型的实例或者null。你需要检查你的代码以确保你在session中存储的是User类型的实例。

    假设你的User类已经正确地实现了并且已经被正确地序列化到session中,你可以尝试以下步骤来解决你的问题:

    首先,确保你的User类实现了Serializable接口,如下:

    public class User implements Serializable {
        // your fields and methods here
    }
    

    然后,在获取session中的用户时,使用强制类型转换,如下:

    User user = (User) session.getAttribute("user");
    

    如果这仍然无法解决问题,那么可能的原因是在session中没有正确地存储User对象。你需要检查你的代码以确保你在设置session属性时使用的是正确的对象实例。例如,你可能在之前的代码中创建了User对象并将其赋值给了session属性,但是在之后的代码中,这个对象可能已经被改变了或者重新创建了一个新的实例。因此,你需要找到正确的User对象实例并将其赋值给session属性。如果这仍然无法解决你的问题,请提供更多的上下文信息,我会尽力帮助你解决。

    另外,对于订单相关的部分代码,你没有显示创建Order对象的完整过程,以及相关的属性设置等。如果在这个过程中出现问题,也可能会导致错误。请确保你的Order类和OrderItem类的所有字段都已经正确初始化并赋值。同时,确保你在创建Order对象并将其赋值给session属性时使用的是正确的对象实例。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月21日

悬赏问题

  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式
  • ¥15 如果要做一个老年人平板有哪些需求
  • ¥15 k8s生产配置推荐配置及部署方案