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 p> 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 p> p>
3 Réponses :
Ceci se produit parce que votre (ou attrape une exception moins générique, par exemple l'exception qui est lancée à partir de try {} catch (exception e) {} code> Block attrape l'exception que vous lancez dans le bloc, jetez l'exception en dehors du
essayez d'attraper code > bloquer et il devrait fonctionner des captures:
userpiository.save code> et retirez-le, puis il va attraper cette exception plutôt que tout) p> p>
Ceci se produit car votre Réduire votre code vers le bas pour illustrer mon point: p> PasswordMatchException code> EXTENDES
EXCEPTION CODE> et votre bloc de capture l'attrape et lance un
UsernameAreadyExistsException code>.
try {
throw new PasswordMatchException();
} catch(Exception e) {
throw new UsernameAlreadyExistsException();
}
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
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."); }