如果用户登录之后,账户名相同,就会提示“账号已存在”否则提示“未知错误”,在全局异常处理器上实现
@ExceptionHandler
public Result exceptionHandler(SQLIntegrityConstraintViolationException ex) {
String message = ex.getMessage();
//其message是Duplicate entry ‘zhangsan’ for key 'employee.idx_username'
if (message.contains("Duplicate entry")){
String[] split = message.split(" ");
String username=split[2];
String msg=username+ MessageConstant.ALREADY_EXIST;
return Result.error(msg);
}else {
return Result.error(MessageConstant.UNKNOWN_ERROR);
}
split
在您提供的代码片段中,message.split(" ") 是一个使用Java的 String 类的 split 方法的调用。这个方法用于根据指定的分隔符将字符串分割成一个字符串数组。
具体来说,message.split(" ") 会根据空格字符将 message 字符串分割成多个部分,并返回一个包含这些部分的数组。每个数组元素代表原字符串中由空格分隔的一个部分。
例如,如果 message 的值是 "Duplicate entry 'username' for key 'PRIMARY'",那么执行 message.split(" ") 后,split 数组将包含以下元素:split[0] = “Duplicate”
split[1] = “entry”
split[2] = “‘username'”
split[3] = “for”
split[4] = “key”
split[5] = “‘PRIMARY'”
这种分割操作在处理异常消息时特别有用,因为它允许你根据消息的结构提取特定的信息。在您的异常处理方法中,通过分割异常消息,您可以找到特定的错误信息,如尝试插入重复的用户名。
@ExceptionHandler
@ExceptionHandler(SQLIntegrityConstraintViolationException.class):这个注解指明了这个方法用于处理 SQLIntegrityConstraintViolationException 类型的异常
SQLIntegrityConstraintViolationException是一个异常类,其message是Duplicate entry ‘zhangsan’ for key ’employee.idx_username’ 这里说明employee.idx_usename 触发了数据库的唯一约束,也就是账号是唯一的不可重复,