/** * 异常处理器 */ @RestControllerAdvice // public class BDExceptionHandler { private Logger logger = LoggerFactory.getLogger(getClass()); @Autowired LogService logService; // // /** // * 自定义异常 // */ // @ExceptionHandler(BDException.class) // public R handleBDException(BDException e) { // logger.error(e.getMessage(), e); // R r = new R(); // r.put("code", e.getCode()); // r.put("msg", e.getMessage()); // return r; // } // @ExceptionHandler(DuplicateKeyException.class) public AppR handleDuplicateKeyException(DuplicateKeyException e) { logger.error(e.getMessage(), e); return AppR.error("数据库中已存在该记录"); } // //404 @ExceptionHandler(org.springframework.web.servlet.NoHandlerFoundException.class) // public R noHandlerFoundException(org.springframework.web.servlet.NoHandlerFoundException e) { // logger.error(e.getMessage(), e); // return R.error(404, "没找找到页面"); // } @ExceptionHandler(AuthorizationException.class) public Object handleAuthorizationException(AuthorizationException e, HttpServletRequest request) { logger.error(e.getMessage(), e); /*if (HttpServletUtils.jsAjax(request)) { return AppR.error(403, "未授权"); }*/ return AppR.error(403, "未授权"); } @ExceptionHandler(SecurityException.class) public Object handleSecurityException(SecurityException e, HttpServletRequest request) { //System.out.println("111111111111111"); logger.error(e.getMessage(), e); return AppR.error(404, "找不到路径"); } @ExceptionHandler({Exception.class}) public Object handleException(Exception e, HttpServletRequest request, HttpServletResponse response) { LogDO logDO = new LogDO(); logDO.setGmtCreate(new Date()); //logDO.setOperation(Const); logDO.setMethod(request.getRequestURL().toString()); logDO.setParams(e.toString()); /*UserDO current = ShiroUtils.getUser(); if(null!=current){ logDO.setUserId(current.getUserId()); logDO.setUsername(current.getUsername()); }*/ // logService.save(logDO); //System.out.println(e.getMessage()); //System.out.println(HttpServletUtils.jsAjax(request)); /*if (HttpServletUtils.jsAjax(request)) { System.out.println("ajax"); }*/ logger.error(e.getMessage(), e); //System.out.println(response.getStatus()); return AppR.error(500, "系统错误"); } }
@ControllerAdvice注解的类可以全局拦截指定的异常,并做想要的包装处理,比如跳转到别的页面,或者返回指定的数据格式等等。
@ExceptionHandler:统一处理某一类异常