package com.zyd.blog.controller; import com.zyd.blog.business.consts.CommonConst; import com.zyd.blog.business.enums.ResponseStatus; import com.zyd.blog.file.exception.OssApiException; import com.zyd.blog.framework.exception.*; import com.zyd.blog.framework.object.ResponseVO; import com.zyd.blog.util.ResultUtil; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authc.AccountException; import org.apache.shiro.authz.UnauthorizedException; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MaxUploadSizeExceededException; import java.lang.reflect.UndeclaredThrowableException; /** * 统一异常处理类
* 捕获程序所有异常,针对不同异常,采取不同的处理方式 * * @author yadong.zhang (yadong.zhang0415(a)gmail.com) * @version 1.0 * @website https://www.zhyd.me * @date 2018/4/24 14:37 * @since 1.0 */ @Slf4j @ControllerAdvice public class ExceptionHandleController { /** * Shiro权限认证异常 * * @param e * @return */ @ExceptionHandler(value = {UnauthorizedException.class, AccountException.class}) @ResponseBody public ResponseVO unauthorizedExceptionHandle(Throwable e) { e.printStackTrace(); // 打印异常栈 return ResultUtil.error(HttpStatus.UNAUTHORIZED.value(), e.getLocalizedMessage()); } /** * Shiro权限认证异常 * * @param e * @return */ @ExceptionHandler(value = {MaxUploadSizeExceededException.class}) @ResponseBody public ResponseVO maxUploadSizeExceededExceptionHandle(Throwable e) { e.printStackTrace(); // 打印异常栈 return ResultUtil.error(CommonConst.DEFAULT_ERROR_CODE, ResponseStatus.UPLOAD_FILE_ERROR.getMessage() + "文件过大!"); } @ExceptionHandler(value = Exception.class) @ResponseBody public ResponseVO handle(Throwable e) { if (e instanceof ZhydException || e instanceof OssApiException) { return ResultUtil.error(e.getMessage()); } if (e instanceof UndeclaredThrowableException) { e = ((UndeclaredThrowableException) e).getUndeclaredThrowable(); } ResponseStatus responseStatus = ResponseStatus.getResponseStatus(e.getMessage()); if (responseStatus != null) { log.error(responseStatus.getMessage()); return ResultUtil.error(responseStatus.getCode(), responseStatus.getMessage()); } e.printStackTrace(); // 打印异常栈 return ResultUtil.error(CommonConst.DEFAULT_ERROR_CODE, ResponseStatus.ERROR.getMessage()); } }