代碼:
@Autowired private UserMapper userMapper; @Autowired // 忘記添加 private RoleMapper roleMapper; @Override public Map<String, Object> selectUserByCondition(Map<String, Object> condition) { Map<String, Object> returnUser = userMapper.selectUserByCondition(condition); if (condition.get("user_pwd")==null) { return returnUser; } // 先用MD5對密碼進行加密,再做比較 String md5 = Md5Utils.md5((String)condition.get("user_pwd")); if(returnUser!=null && md5.equals(returnUser.get("user_pwd"))) { return returnUser; } return null; } @Override public int changePasswordById(Map<String, Object> user) { int i = userMapper.changePasswordById(user); if (i > 0) { return i; } return 0; } public PageUtils selectByConditionToPage(Map<String, Object>condition, int index) { // 1.通過條件查詢記錄數 int count = userMapper.selectCountByCondition(condition); // 每頁的記錄數 int size = Global.PAGE_SIZE; LOGGER.debug(count); PageUtils pageUtils = null; if (count > 0) { pageUtils = new PageUtils(index, size, count); // 2.通過條件查詢數據 // 注意:開始位置 = 索引*每頁記錄數 index = index*size; List<Map<String,Object>> page = userMapper.selectByConditionToPage(condition, index, size); // 將角色的數據也加入到集合里面 for (Map<String, Object> user : page) { // 第一步:通過 user 中的 role_id Object role_id = user.get("role_id"); Map<String, Object> role = new HashMap<String, Object>(); role.put("role_id", role_id); // 第二步:通過 role_id 獲得角色信息 role = roleMapper.selectRoleByCondition(role); // 報錯點 // 第三步:將角色的字段拼接到 user 里面 // 使用拼接在同一層的方式,不同表的字段名是不可以重復的 user.put("role", role); LOGGER.debug("管理員拼接后的字段:"+role); } pageUtils.setPage(page); } return pageUtils; }
錯誤詳情:
java.lang.NullPointerException at cn.mgy.service.impl.UserServiceImpl.selectByConditionToPage(UserServiceImpl.java:72) at cn.mgy.controller.UserController.toUserList(UserController.java:129) at cn.mgy.controller.UserController$$FastClassBySpringCGLIB$$25cf3127.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:736) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133) at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:671) at cn.mgy.controller.UserController$$EnhancerBySpringCGLIB$$5f531980.toUserList(<generated>) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)
怎么樣去解決錯誤:第一:先看控制台,報錯的原因,看到空指針異常,有點蒙,不知去哪找錯了,並且報錯的地方好像有點沒對象。
第二:加了日志,可日志好像並沒有打印出來,聯想到可能調用的方法沒有去執行。那為什么會不執行呢?
第三:應該馬上聯想到該對象沒有注入,然后去瞄一眼,哎,真的是,真沒有注入,馬上注入,立即執行,啊,成功了