MySQLIntegrityConstraintViolationExceptionのみを処理しており、他の例外(NestedServletExceptionおよびDuplicateKeyException)を処理していないため、スタックトレースが取得され、try/catchが機能していません。
ところで、ユーザー名がすでに存在するかどうかを確認するための追加のメソッドを作成し、存在する場合はエラーメッセージを表示し、そうでない場合はユーザーを追加してみませんか。
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);
}
//.....
}