java - Java抛出错误的异常
问题描述
我创建了 2 个自定义异常来处理创建新用户并将其持久保存到数据库。电子邮件(用户名)是唯一 ID,因此如果电子邮件重复,则应引发异常,因为唯一 ID 已经存在。我也在做一个密码确认匹配。此确认匹配也会引发密码不匹配的自定义异常。这两部分相互独立地正常工作,但是,当我将所有内容放在一起并进行测试时,如果密码确认失败,则会抛出用户名已经存在异常而不是密码不匹配异常。为什么?
我已经尝试重新排序代码,但这似乎并不重要。我也试过 if/else 而不是 just if 但得到了相同的结果
//Username(email) must be unique
try {
//password and confirm password must match
if (!newGcUser.getPassword().equals(newGcUser.getConfirmPassword())) {
throw new PasswordMatchException("password and confirm password does not match");
}
//if passwords match - persist to DB
newGcUser.setPassword(bCryptPasswordEncoder.encode(newGcUser.getPassword()));
//Do NOT persist or show the confirm Password
newGcUser.setConfirmPassword("");
//set user
newGcUser.setName(newGcUser.getUsername());
return userRepository.save(newGcUser);
} catch (Exception e) {
throw new UsernameAlreadyExistsException("Username: '" + newGcUser.getUsername() + "' already exists.");
}
}
我正在使用 Postman 进行测试。如果我测试一封我知道未注册的电子邮件并且与密码不匹配,我会收到 UsernameAlreadyExistsException 消息而不是 PasswordMatchException
解决方案
发生这种情况是因为您的try {} catch (Exception e) {}
块正在捕获您在块内抛出的异常,将异常抛出到try catch
块外并且它应该可以工作 catch :
// password and confirm password must match
if (!newGcUser.getPassword().equals(newGcUser.getConfirmPassword())) {
throw new PasswordMatchException("password and confirm password does not match");
}
// Username(email) must be unique
try {
// if passwords match - persist to DB
newGcUser.setPassword(bCryptPasswordEncoder.encode(newGcUser.getPassword()));
// Do NOT persist or show the confirm Password
newGcUser.setConfirmPassword("");
// set user
newGcUser.setName(newGcUser.getUsername());
return userRepository.save(newGcUser);
} catch (Exception e) {
throw new UsernameAlreadyExistsException("Username: '" + newGcUser.getUsername() + "' already exists.");
}
(或捕获一个不太通用的异常,例如抛出userRepository.save
并重新抛出它的异常,然后它只会捕获该异常而不是全部)
推荐阅读
- swift - 致命错误:在展开可选值 SwiftUI AnimatedImage 时意外发现 nil
- typescript - 在打字稿中显示 TimeSpan 类型数据
- binary - 如何在 IBM 云函数中使用第三方二进制文件
- javascript - 找不到模块:无法解析“反应分页”
- python - 带控制变量的 GEKKO 最优控制
- python - PyAutoGUI 没有返回正确的 rgb 值
- javascript - 不和谐。向用户提问并获得答案
- python - Pandas groupby 将一列与另一列进行计数
- spring-boot - 我无法使用弹簧靴注销
- react-admin - 如何使用 react-admin 将自定义值设置为数字字段