首页 > 解决方案 > 登录用户的 WebServlet 列表

问题描述

我正在尝试创建一个药物列表,以便添加药物的用户可以看到它们并且只有他可以看到,而他不会看到其他用户的药物。但是,当我登录在数据库中添加了 2 种药物的账户时,我访问了我的 servlet /mlist,我看到“列表中没有药物”,因为我的 user_id 被分配了 0,我不明白为什么。

//编辑“我request.getSession().getAttribute("user_id");错了,因为它没有占用用户会话,正确的是request.getSession().getAttribute("user");

但现在我遇到了新问题PreparedStatementCallback; SQL [SELECT id_medicines, name, drugform, quantity, expiration_date, description, user_id FROM medicines WHERE user_id= ?Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException //

SQL 调用

public List<Medicines> findByProperty(String propName, Object propValue) {
        String sql = "SELECT id_medicines, name, drugform, quantity, expiration_date, 
        description, user_id FROM medicines WHERE "+propName+"= ?";
        List<Medicines> medicines = jdbcTemplate.query(sql, new MedicinesRowMapper(), propValue);
        return medicines;
    }

药品服务

public List<Medicines> findUserMedicines(User user_id){
        DAOFactory factory = DAOFactory.getDAOFactory();
        MedicinesDAO medicinesDao = factory.getMedicinesDAO();
        return medicinesDao.findByProperty("user_id", user_id);
    }`

findUserMedicines 取自 DAOFactory 这一行public abstract MedicinesDAO getMedicinesDAO();

小服务程序 /mlist

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
             {
        medicinesList(request);
        request.getRequestDispatcher("WEB-INF/mlist.jsp").forward(request, response);
    }

    public void medicinesList(HttpServletRequest request) throws ServletException, IOException
    {
        request.setCharacterEncoding("UTF-8");
        MedicinesService medicinesService = new MedicinesService();
        User user_id = (User) request.getSession().getAttribute("user");
        List<Medicines> userMedicines =  medicinesService.findUserMedicines(user_id);
        request.setAttribute("medicines", userMedicines);
    }

登录过滤器

private void saveUserInSession(HttpServletRequest request) {
    UserService userService = new UserService();
    String username = request.getUserPrincipal().getName();
    User userByUsername = userService.getUserByUsername(username);
    request.getSession(true).setAttribute("user", userByUsername);
}

标签: springjdbctemplatenotserializableexception

解决方案


问题出在线路上User user_id = (User) request.getSession().getAttribute("user");。您User在问题中未提供的课程未序列化。但即使你让它可序列化,我怀疑它会给你想要的结果。

我想你的用户 id 实际上是一个String. User从您的对象中获取用户 ID作为 aString并将其传递到您的查询中。(即使它位于 anint或 a 的位置,同样适用long。您需要从您的User对象中获取它。

类似的东西

String userIdString = user_id.getId();

如果您在问题中提供您的User课程,我可以更新答案。


推荐阅读