在Spring MVC项目中遇到空指针异常(NullPointerException)通常与项目中组件的使用有关,如控制器层(Controller)、业务层(Service)、Dao层、依赖注入等。
1、控制器层(Controller)
·依赖注入失效
如果UserService没有被正确地注入,这里访问userService时会抛出NullPointerException
java">@Resource
private UserService userService;
解决方案:确保所有的依赖都被正确注入和扫描
·请求参数未被正确传递
如果从前端获取一个对象或参数,但是没有接收到,就会导致空指针异常
java"> // 显示添加用户页面@RequestMapping(value = "/userAdd")public String showAddUserPage() {return "useradd"; // 返回视图名称,"useradd" 是添加用户页面的视图名称}// 处理添加用户请求@RequestMapping(value = "/addUser",method = {RequestMethod.GET, RequestMethod.POST})public String addUser(@RequestParam("userCode") String userCode,@RequestParam("userName") String userName,HttpSession session) {// 创建用户对象并设置属性User user = new User();user.setUserCode(userCode);user.setUserName(userName);user.setCreatedBy(((User) session.getAttribute(Constants.USER_SESSION)).getId());// 调用服务层方法boolean success = userService.add(user);if (success) {return "redirect:/user/query"; // 添加成功,重定向到用户查询页面} else {return "useradd"; // 添加失败,返回到添加用户页面}}
解决方案:打断点检查参数是否为null
2、业务层(Service)
·返回值问题
业务层或Dao层的方法可能返回null,如果没有进行空值检查就直接使用,就可能导致空指针异常
java">public User findUserById(Long id) {// 从数据库查询用户User user = userRepository.findById(id).orElse(null);return user; // 如果没有找到用户,则返回null
}
解决方案:检查需要返回null的相关方法
3、Dao层
·数据库操作返回null
例如,查找一个不存在的记录可能返回null,而代码未对此进行处理
java">public class UserDao {private Connection connection;public UserDao(Connection connection) {this.connection = connection;}public String getUserNameById(int userId) {String sql = "SELECT name FROM users WHERE id = ?";try (PreparedStatement stmt = connection.prepareStatement(sql)) {stmt.setInt(1, userId);ResultSet rs = stmt.executeQuery();if (rs.next()) {return rs.getString("name"); // 返回用户名}} catch (SQLException e) {e.printStackTrace();}return null; // 如果没有找到用户,返回null}
}
解决方案:进行null检查