Spring Boot 全域性異常
阿新 • • 發佈:2018-12-16
兩種方案
一、使用@ControllerAdvice註解,Controller層的全域性異常統一處理
解釋註釋裡面有。
@ControllerAdvice 主要是用來Controller的一些公共的需求的低侵入性增強提供輔助,作用於@RequestMapping標註的方法上。
換句話說就是,這裡能夠捕獲到的異常,是由前端呼叫controller層@RequestMapping標註的方法內產生的。自己跑的定時程式的異常用這個方式catch不到!
@ExceptionHandler(value = Exception.class)
該註解是配合@ExceptionHandler一起使用的註解,自定義錯誤處理器,可自己組裝json字串,並返回到頁面。
value中指定該方法需要處理的那些異常類。
如果返回的是json,不是view,需要在方法上新增@ResponseBody
下圖程式碼,是對Exception和自定義的BizException進行不同的處理,寫得比較粗糙。正常情況下,出於安全考慮,Exception資訊只打印日誌,不暴露給前端。
package com.gs.base.util; import common.request.spring.boot.autoconfigure.exception.BizException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.annotation.Order; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; /** * @program: gs_auth * @description: 全域性異常 ControllerAdvice方式 * @author: liyijie * @create: 2018-10-18 17:07 **/ @Order(value = -1) @ControllerAdvice //主要是用來Controller的一些公共的需求的低侵入性增強提供輔助,作用於@RequestMapping標註的方法上。 public class GlobalExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); /** * 全域性異常捕捉處理 * @param e * @return */ //該註解是配合@ExceptionHandler一起使用的註解,自定義錯誤處理器,可自己組裝json字串,並返回到頁面。 //value中指定該方法需要處理的那些異常類 @ResponseBody @ExceptionHandler(value = Exception.class) public MyResponse<Void> exceptionHandler(Exception e) { logger.error(e.getMessage(),e); return new MyResponse<>(MyResponse.CODE_FAIL,null,e.toString(),System.currentTimeMillis()); } /** * 攔截捕捉自定義異常 BizException.class * @param e * @return */ @ResponseBody @ExceptionHandler(value = BizException.class) public MyResponse<Void> BizExceptionHandler(BizException e) { return new MyResponse<>(MyResponse.CODE_FAIL,null,e.getMsg(),System.currentTimeMillis()); } }
二、實現ErrorController介面或者繼承AbstractErrorController抽象類或者繼承BasicErrorController類
等我心情好的時候把它補上