之所以要在项目中定义全局异常捕获,是因为直接异常信息给前端是真的很不友好。
首先,创建一个CommonExceptionHandler 类(自定义) ,在类头加上@ControllerAdvice注解。
/**
* @Description: 公共异常处理类
* @Author: Gary
* @Date: 2019-03-22 23:57
* <p>Code is my soul.<p/>
*/
@Slf4j
@ControllerAdvice
public class CommonExceptionHandler {
/**
* 拦截Exception类的异常
* @param e
* @return
*/
@ExceptionHandler(Exception.class)
@ResponseBody
public RestfulResponse exceptionHandler(Exception e){
log.warn(ExceptionUtils.getStackTrace(e));
return RestfulResponse.getRestfulResponse(StatusCode.GLOBAL_ERROR);
}
/**
* 拦截HttpMessageNotReadableException类的异常
* @param e
* @return
*/
@ExceptionHandler(HttpMessageNotReadableException.class)
@ResponseBody
public RestfulResponse messageNotReadableExceptionHandler(Exception e){
log.warn(ExceptionUtils.getStackTrace(e));
return RestfulResponse.getRestfulResponse(StatusCode.GLOBAL_ERROR);
}
}
部分异常无法捕获,需要添加新的方法去捕获。