SpringBoot统一异常处理

/**
 * 异常处理器
 */
@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:统一处理某一类异常

猜你喜欢

转载自www.cnblogs.com/anong/p/9447515.html