当我们的业务层出现异常,后台报错而没有给前端合理的响应,这种情况是肯定不能出现的,但是我们也不能每个接口都try/catch一遍,自己处理异常。我们可以通过SpringMVC提供的@ControllerAdvice注解来进行简单的全局统一异常处理。
//api下包含了controller和service和mapper
@ControllerAdvice(basePackages = "com.winner.api")
public class ExceptionHandleController {
private final static Logger logger = LoggerFactory.getLogger(ExceptionHandleController.class);
/**
* @description: 异常处理
* @param e
* @return: AjaxResponse 自定义响应体
*/
@ExceptionHandler(value = Exception.class) //处理所有异常
@ResponseBody
public AjaxResponse errorResult(Exception e) {
logger.error("程序发生异常,异常原因:" + e.toString());
if (e instanceof MethodArgumentTypeMismatchException) {
return AjaxResponse.newInstance(10001, "参数错误,请检查参数");
}
return AjaxResponse.newInstance(500, e.toString());
}
}
当然,以上处理还比较粗暴简单,所有的Exception都走这个,这是懒省事的写法。我们应该自定义异常和错误码,尽量返回给前端更准确易懂的信息。
@RestControllerAdvice = @ControllerAdvice + @ResponseBody