即使将 @Autowired 添加到“private IUserService userService;”之后,我也会从运行 LoginController 的代码中收到错误。有人可以帮忙吗?非常感谢!
“路径 [] 上下文中 servlet [dispatcherServlet] 的 Servlet.service() 抛出异常 [请求处理失败;嵌套异常为 java.lang.NullPointerException],其根本原因 java.lang.NullPointerException: null"
代码
@Controller
@RequestMapping("/login")
@Slf4j
public class LoginController {
@Autowired
// no autowired, nullpointerexception
// autowired, cannot receive response
private IUserService userService;
@RequestMapping("/toLogin") //to log in page 跳转登录页
public String toLogin(){
return "login";
}
@RequestMapping("/doLogin")
@ResponseBody
public RespBean doLogin(LoginVo loginVo) {
// 接受传参 receive parameter from users with LoginVo
return userService.doLogin(loginVo);
}
}
public interface IUserService extends IService<User> {
RespBean doLogin(LoginVo loginVo);
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
private UserMapper userMapper;
@Override
public RespBean doLogin(LoginVo loginVo) {
String mobile = loginVo.getMobile();
String password = loginVo.getPassword();
// check whether input is empty
if (StringUtils.isEmpty(mobile) || StringUtils.isEmpty(password)) {
return RespBean.error(RespBeanEnum.LOGIN_ERROR);
}
// check whether mobile is valid
if (!ValidatorUtil.isMobile(mobile)) {
return RespBean.error(RespBeanEnum.MOBILE_ERROR);
}
// find user with mobile
User user = userMapper.selectById(mobile);
if (user == null) {
return RespBean.error(RespBeanEnum.LOGIN_ERROR);
}
// verify whether user password is correct
if (!MD5Util.frontPassToDBPass(password, user.getSalt()).equals(user.getPassword())) {
return RespBean.error(RespBeanEnum.LOGIN_ERROR);
}
return RespBean.success();
}
}
如果没有@Autowired,登录页面无论如何都会用上面的NullPointerException响应用户输入。 添加@Autowired后,如果手机输入无效,则没有任何响应。如果手机和密码输入有效,登录页面将响应上面的 NullPointerException。
我尝试根据下面的网站添加 @Component 限定符,但它不起作用。