-1
votes

Java jetant une mauvaise exception

J'ai créé 2 exceptions personnalisées pour gérer la création et la persistance de nouveaux utilisateurs à une DB. Le courrier électronique (nom d'utilisateur) est l'ID unique, donc si un courrier électronique est dupliqué une exception doit être lancé car l'identifiant unique existe déjà. Je fais aussi un match de confirmation de mot de passe. Cette correspondance de confirmation jettera également une exception personnalisée des mots de passe ne correspond pas. Ces 2 pièces fonctionnent correctement indépendamment les unes des autres, cependant, lorsque je mettez tout ensemble et testez, si une confirmation de mot de passe échoue, son lanceur existe déjà que le nom d'utilisateur existe déjà une exception à la place des mots de passe ne correspondent pas à une exception. Pourquoi?

J'ai essayé de réorganiser le code mais cela ne semble pas compter. J'ai aussi essayé si / sinon plutôt, juste si mais obtenez les mêmes résultats xxx

J'utilise le facteur à tester. Si je teste un email, je connais n'est pas inscrit et instahite les mots de passe que je reçois le message USERNAMEAYReadyExISTSException à la place du mot de passeMatchException


0 commentaires

3 Réponses :


2
votes

Ceci se produit parce que votre try {} catch (exception e) {} Block attrape l'exception que vous lancez dans le bloc, jetez l'exception en dehors du essayez d'attraper bloquer et il devrait fonctionner des captures: xxx

(ou attrape une exception moins générique, par exemple l'exception qui est lancée à partir de userpiository.save et retirez-le, puis il va attraper cette exception plutôt que tout)


0 commentaires

0
votes

Ceci se produit car votre PasswordMatchException code> EXTENDES EXCEPTION CODE> et votre bloc de capture l'attrape et lance un UsernameAreadyExistsException code>.

Réduire votre code vers le bas pour illustrer mon point: p>

try {
     throw new PasswordMatchException();
} catch(Exception e) {
     throw new UsernameAlreadyExistsException();
}


1 commentaires

merci aux deux réponses. J'ai déplacé mon mot de passe si une instruction sur Type / Catch, a créé la confirmation de mot de passe requise et tout fonctionne maintenant



0
votes

Conseillez de casser dans différentes méthodes et de le rendre modulaire:

// Username(email) must be unique
try {
    // if passwords match - persist to DB
   ...
    return userRepository.save(newGcUser);

} catch (DataIntegrityViolationException e) {
    throw new UsernameAlreadyExistsException("Username: '" + newGcUser.getUsername() + "' already exists.");
}


0 commentaires