说明:在写程序时,出现异常是正常的,但是不是所有的异常都能捕获或者抛出的,有时候自己都不知道的异常。在接口与接口调用中,如果每个接口都try~catch会感觉到有点累赘或者繁琐。
比如:int i = 1/0 ; 这条语句,如果你没有try-catch,那么调用该接口就会直接报错,影响调用该接口的功能执行。对于调用该接口的人来说,根本不知道怎么回事,可以会导致他的代码也运行不下去。
但是spring里面提供了这个解决该问题的功能:
ExceptionHandler运行机制分析
ExceptionHandler是spring里面的一个注解,非常方便去掉try...catch这类冗余难看的代码,有利于代码的整洁和优美。还能统一处理异常,是个非常好的技巧。如果出现未捕获的异常,会直接进入ExceptionHandler注解的方法中。
直接将以下代码放入项目内,就可以运行了。附代码:
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* \* Created with IntelliJ IDEA.
* \* @author wcy
* \* @date: 2019/8/8
* \* @time: 13:38
* @description:
* 对于一些没有捕获的异常,但是出现的莫名其妙的异常
* 会进行拦截,进行异常处理,保证接口请求返回正常。
* @create: 2019-07-16 08:03
*/
@RestControllerAdvice
public class ErrExceptionHandler {
public static final Logger logger= LoggerFactory.getLogger(ErrExceptionHandler .class);
@ExceptionHandler(value = Exception.class) //申明捕获那个异常类
public Object errorHandler(HttpServletRequest request, HttpServletResponse response, Exception e) throws Exception {
// 异常进入该方法,可以进行代码功能处理
//将异常打印出来,方便进行排查
StringBuffer header = request.getRequestURL();
String queryString = request.getQueryString();
logger.error("全局异常抛出的请求:"+header +"###请求参数:"+queryString);
logger.error(ExceptionUtils.getStackTrace(e));
return "全局异常哦";
}
}