使用@ExceptionHandler对数据库异常进行统一处理
- 数据库插入异常信息,插入字段长短超时数据库设置字段长度
@ExceptionHandler(MysqlDataTruncation.class)
@ResponseBody
public KcloudResponse dataTruncationException(MysqlDataTruncation e) {
log.warn("字段超长");
return ResponseBuilder.error("字段超长");
}
- 结果每次都捕获不到
- 经调试发现,sql异常被spring同意处理了
DataIntegrityViolationException
- 下面对异常捕获代码进行调整
@ExceptionHandler(DataIntegrityViolationException.class)
@ResponseBody
public KcloudResponse dataIntegrityViolationException(DataIntegrityViolationException e) {
Throwable cause = e.getCause();
if (cause.getClass().equals(MysqlDataTruncation.class)) {
log.warn("字段超长");
return ResponseBuilder.error("字段超长");
} else if (cause.getClass().equals(SQLIntegrityConstraintViolationException.class)) {
log.warn("唯一索引冲突");
return ResponseBuilder.error("唯一索引冲突");
} else if (cause.getClass().equals(SQLSyntaxErrorException.class)) {
log.warn("数据库插入异常");
return ResponseBuilder.error("数据库插入异常");
}
log.warn("数据库操作异常");
return ResponseBuilder.error("数据库操作异常");
}