/** * @author hhh * @date 2019/1/17 16:28 * @Despriction */ @ResponseBody @ControllerAdvice @Log4j2 public class GlobalExceptionHandler { /** * 通用錯誤一般用於 catch 拋出異常的時候 詳情見消息體 */ public static final Integer GENERAL_ERROR = 604; //處理通用異常 @ExceptionHandler(value = Exception.class) public BaseResMessage defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception { BaseResMessage<Entity> message = new BaseResMessage<>(); log.error("非捕獲異常{}", e); StackTraceElement[] stackTrace = e.getStackTrace(); StringBuilder sb = new StringBuilder("[系統錯誤!" + e.getClass().getName() + ": " + e.getLocalizedMessage() + "]\n"); for (StackTraceElement stackTraceElement : e.getStackTrace()) { String s = stackTraceElement.toString(); if (s.startsWith("com.jn")) { sb.append(s).append("\n"); } } return message.error(GENERAL_ERROR, sb.toString()); } @ExceptionHandler(CustomException.class)//可以將Exception中的異常信息以Json的信息返回給前端 public BaseResMessage handle(CustomException e) { log.error("狀態碼:" + e.getErrorCode(), e); return this.error(e); } public static BaseResMessage error(CustomException e) { BaseResMessage baseResMessage = new BaseResMessage(); baseResMessage.setStatus(e.getErrorCode()); baseResMessage.setMsg(e.getMessage()); return baseResMessage; } }
public class CustomException extends RuntimeException { private static final long serialVersionUID = 1L; public static final Integer UNKNOWN_ERROR = -1; /** * 錯誤編碼 */ private int errorCode = UNKNOWN_ERROR; /** * 消息是否為屬性文件中的Key */ private boolean propertiesKey = true; /** * 構造一個基本異常. * * @param message * 信息描述 */ public CustomException(String message) { super(message); } /** * 構造一個基本異常. * * @param errorCode * 錯誤編碼 * @param message * 信息描述 */ public CustomException(int errorCode, String message) { this(errorCode, message, true); } /** * 構造一個基本異常. * * @param errorCode * 錯誤編碼 * @param message * 信息描述 */ public CustomException(int errorCode, String message, Throwable cause) { this(errorCode, message, cause, true); } /** * 構造一個基本異常. * * @param errorCode * 錯誤編碼 * @param message * 信息描述 * @param propertiesKey * 消息是否為屬性文件中的Key */ public CustomException(int errorCode, String message, boolean propertiesKey) { super(message); this.setErrorCode(errorCode); this.setPropertiesKey(propertiesKey); } /** * 構造一個基本異常. * * @param errorCode * 錯誤編碼 * @param message * 信息描述 */ public CustomException(int errorCode, String message, Throwable cause, boolean propertiesKey) { super(message, cause); this.setErrorCode(errorCode); this.setPropertiesKey(propertiesKey); } /** * 構造一個基本異常. * * @param message * 信息描述 * @param cause * 根異常類(可以存入任何異常) */ public CustomException(String message, Throwable cause) { super(message, cause); } public int getErrorCode() { return errorCode; } public void setErrorCode(int errorCode) { this.errorCode = errorCode; } public boolean isPropertiesKey() { return propertiesKey; } public void setPropertiesKey(boolean propertiesKey) { this.propertiesKey = propertiesKey; } }