You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.9 KiB
105 lines
3.9 KiB
package cc.niushuai.bastionserver.common.exception; |
|
|
|
import cc.niushuai.bastionserver.common.api.vo.Result; |
|
import lombok.extern.slf4j.Slf4j; |
|
import org.apache.shiro.authz.AuthorizationException; |
|
import org.apache.shiro.authz.UnauthorizedException; |
|
import org.springframework.dao.DataIntegrityViolationException; |
|
import org.springframework.dao.DuplicateKeyException; |
|
import org.springframework.data.redis.connection.PoolException; |
|
import org.springframework.web.HttpRequestMethodNotSupportedException; |
|
import org.springframework.web.bind.annotation.ExceptionHandler; |
|
import org.springframework.web.bind.annotation.RestControllerAdvice; |
|
import org.springframework.web.multipart.MaxUploadSizeExceededException; |
|
import org.springframework.web.servlet.NoHandlerFoundException; |
|
|
|
/** |
|
* 全局异常处理 |
|
* |
|
* @author niushuai233 |
|
* @date: 2022/12/23 17:59 |
|
*/ |
|
@Slf4j |
|
@RestControllerAdvice |
|
public class GlobalExceptionHandler { |
|
|
|
/** |
|
* 处理自定义异常 |
|
*/ |
|
@ExceptionHandler(BusinessException.class) |
|
public Result<?> handleBusinessException(BusinessException e) { |
|
log.error(e.getMessage(), e); |
|
return Result.error(e.getCode(), e.getMessage()); |
|
} |
|
|
|
@ExceptionHandler(NoHandlerFoundException.class) |
|
public Result<?> handlerNoFoundException(Exception e) { |
|
log.error(e.getMessage(), e); |
|
return Result.error(404, "路径不存在,请检查路径是否正确"); |
|
} |
|
|
|
@ExceptionHandler(DuplicateKeyException.class) |
|
public Result<?> handleDuplicateKeyException(DuplicateKeyException e) { |
|
log.error(e.getMessage(), e); |
|
return Result.error("数据库中已存在该记录"); |
|
} |
|
|
|
@ExceptionHandler({UnauthorizedException.class, AuthorizationException.class}) |
|
public Result<?> handleAuthorizationException(AuthorizationException e) { |
|
log.error(e.getMessage(), e); |
|
return Result.noauth("没有权限,请联系管理员授权"); |
|
} |
|
|
|
@ExceptionHandler(Exception.class) |
|
public Result<?> handleException(Exception e) { |
|
log.error(e.getMessage(), e); |
|
return Result.error("操作失败," + e.getMessage()); |
|
} |
|
|
|
/** |
|
* @param e |
|
* @return |
|
* @Author 政辉 |
|
*/ |
|
@ExceptionHandler(HttpRequestMethodNotSupportedException.class) |
|
public Result<?> httpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) { |
|
StringBuffer sb = new StringBuffer(); |
|
sb.append("不支持"); |
|
sb.append(e.getMethod()); |
|
sb.append("请求方法,"); |
|
sb.append("支持以下"); |
|
String[] methods = e.getSupportedMethods(); |
|
if (methods != null) { |
|
for (String str : methods) { |
|
sb.append(str); |
|
sb.append("、"); |
|
} |
|
} |
|
log.error(sb.toString(), e); |
|
//return Result.error("没有权限,请联系管理员授权"); |
|
return Result.error(405, sb.toString()); |
|
} |
|
|
|
/** |
|
* spring默认上传大小100MB 超出大小捕获异常MaxUploadSizeExceededException |
|
*/ |
|
@ExceptionHandler(MaxUploadSizeExceededException.class) |
|
public Result<?> handleMaxUploadSizeExceededException(MaxUploadSizeExceededException e) { |
|
log.error(e.getMessage(), e); |
|
return Result.error("文件大小超出10MB限制, 请压缩或降低文件质量! "); |
|
} |
|
|
|
@ExceptionHandler(DataIntegrityViolationException.class) |
|
public Result<?> handleDataIntegrityViolationException(DataIntegrityViolationException e) { |
|
log.error(e.getMessage(), e); |
|
//【issues/3624】数据库执行异常handleDataIntegrityViolationException提示有误 #3624 |
|
return Result.error("执行数据库异常,违反了完整性例如:违反唯一约束、违反非空限制、字段内容超出长度等"); |
|
} |
|
|
|
@ExceptionHandler(PoolException.class) |
|
public Result<?> handlePoolException(PoolException e) { |
|
log.error(e.getMessage(), e); |
|
return Result.error("Redis 连接异常!"); |
|
} |
|
|
|
}
|
|
|