ユーザーがすでに存在する場合、例外をスローするユーザー登録サービスを作成しました。Java例外がスローされない
public User register(User user, String role) throws UserExistsException{
boolean userExists = existUserInDB(user);
if(userExists) {
logger.info("Yes, this user exists!");
throw new UserExistsException("This user already exists in database!");
}
try {
String encryptedPassword = getEncryptedPassword(user.getPassword(), getSalt(user));
user.setPassword(encryptedPassword);
Role userRole;
if (role == null){
TypedQuery<Role> query = entityManager.createQuery(
"SELECT r "+
"FROM Role r "+
"WHERE rolename = 'User'", Role.class);
userRole = query.getSingleResult();
} else {
TypedQuery<Role> query = entityManager.createQuery(
"SELECT r "+
"FROM Role r "+
"WHERE rolename = '"+role+"'", Role.class);
userRole = query.getSingleResult();
}
user.getRoles().add(userRole);
userRole.getUsers().add(user);
entityManager.persist(userRole);
entityManager.persist(user);
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
logger.warning("CryptAPI faild: " + e.getMessage());
}
return user;
}
ログ確認、existUserInDB方法が正しいブール値を返すこと:ここで、レジスタメソッドのコードです。指定されたユーザーがデータベースに存在します。しかし例外は投げられません。 私は多くの自己実装例外をすべてアプリケーションに投げ込み、正しくキャッチしました。これ以外のすべて。誰か助けてくれますか?
次に、私がregisterメソッドを呼び出すコードを示します。
public String register() {
regUser.setEmail(this.emailAdd);
try {
userService.register(regUser, userRole);
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Der Benutzer wurde erfolgreich registriert.", null));
context.getExternalContext().getFlash().setKeepMessages(true);
} catch (UserExistsException e) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Der Benutzer ist bereits registriert!", null));
}
curSession.setCurrentUser(regUser);
init();
return "home.xhtml?faces-redirect=true";
}
そして、ここでは例外のクラス定義である:
public class UserExistsException extends Exception {
private static final long serialVersionUID = -9218609941894034576L;
public UserExistsException(){
super();
}
public UserExistsException(String message){
super(message);
}
}
例外はどこに投げられるべきですか?そして、すべてが正しければなぜそれは投げられるべきですか? – Thomas
この行は印刷されていますか? 'logger.info("はい、このユーザーは存在します! ");' – Azodious
そして、この例外が予想される場所のコードを表示してください。つまり、 'register'が呼び出された場所からですか? – Azodious