Sie behandeln nur MySQLIntegrityConstraintViolationException, keine anderen Ausnahmen:NestedServletException und DuplicateKeyException, und daher erhalten Sie Stacktrace und Ihr Try/Catch funktioniert nicht.
Übrigens, warum nicht einfach eine zusätzliche Methode erstellen, um zu prüfen, ob der Benutzername bereits vorhanden ist, und wenn ja, dann eine Fehlermeldung anzeigen, andernfalls Benutzer hinzufügen.
class UserRepositoryImpl implements UserRepository{
//.....
public int isUsernameExist(String username){
String sql = "SELECT COUNT(*) FROM users WHERE username=?";
return jdbcTemplate.queryForObject(sql, new Object[] { username }, String.class);
}
//....
}
@RequestMapping(value="/register", method=RequestMethod.POST)
public String processRegisterUser(@ModelAttribute("user") User user, BindingResult result){
int status = userRepository.isUserExist(user.getUsername());
if(status==1){
//Username exist... redirect and display error msg.
} else {
userRepository.addUser(user);
}
//.....
}