使用@ControllerAdvice实现全局异常处理

在Web开发中,最基本的都是从Controller到Service再到DAO。在开发的过程中,会需要处理各种异常。Service异常往上抛,如果上层没有try-catch,就会出异常。而通过ControllerAdvice 注解,我们可以使得所有异常在controller进行处理,而开发过程中更加专注于业务的处理


@ControllerAdvice(annotations = {RestController.class})
@Slf4j
public class DefaultControllerAdvice {

    @ExceptionHandler({Throwable.class, Error.class, AbstractMethodError.class, Exception.class, HttpMessageNotReadableException.class, MissingServletRequestParameterException.class, HttpMessageConversionException.class, HttpMessageNotWritableException.class, HibernateException.class, ValidationException.class})
    @ResponseBody
    public ResponseMap error(Throwable e) {
        String stackTrace = ExceptionUtil.exceptionStackTrace(e);
        log.error(stackTrace);
        ExceptionContext.setExceptionMessage(stackTrace);
        return ResponseMap.commonFailure();
    }

    /**
     * 处理系统内部异常
     *
     * @param e
     * @return
     */
    @ExceptionHandler(YuncaiException.class)
    @ResponseBody
    public Object yuncaiException(YuncaiException e) {
        String exceptionMessage = ExceptionUtil.exceptionStackTrace(e);
        log.error(exceptionMessage);
        return ResponseMap.failure(e.getCode(), e.getMessage());
    }

}

你可能感兴趣的:(使用@ControllerAdvice实现全局异常处理)