基础组件-自定义异常和异常拦截

Posted gabriel-y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础组件-自定义异常和异常拦截相关的知识,希望对你有一定的参考价值。

自定义异常

/**
 * @author: Gabriel
 * @date: 2020/1/17 14:56
 * @description 自定义异常
 */
@Data
public class BusinessException extends RuntimeException {

    /** 状态码 */
    protected int code;

    /** 错误信息 */
    protected String message;

    /** 枚举值 */
    private ResultCode resultCode;


    public BusinessException(ResultCode resultCode) {
        this.resultCode = resultCode;
        this.code = resultCode.getCode();
        this.message = resultCode.getDesc();
    }
}

异常拦截

/**
 * @author: Gabriel
 * @date: 2020/1/17 14:55
 * @description 全局异常拦截
 */
@Slf4j
@RestControllerAdvice
public class GlobalExceptionControllerAdvice {

    /**
     * 统一异常拦截
     * @param request
     * @param exception
     * @return
     */
    @ExceptionHandler(value = Exception.class)
    public Result exceptionHandler(HttpServletRequest request,Exception exception){
        /**
         * 如果是参数校验异常,不进入日志统计
         */
        if (exception instanceof BindException) {
            BindException e = (BindException) exception;
            List<ObjectError> allErrors = e.getAllErrors();
            String defaultMessage = allErrors.get(0).getDefaultMessage();
            return Result.errorCodeMessage(ResultCode.ILLEGAL_ARGUMENT.getCode(),defaultMessage);
        }
        /**
         * 非参数校验异常 记录日志 ,有助于错误排查
         */
        log.error("服务器内部错误: 请求地址--->{},请求ip--->:{},错误详情:{},请求参数:{}",
                request.getRequestURL(), IpAddressUtil.getIpAddr(request), exception.getMessage(), RequestUtil.getParams(request));

        log.error("服务器内部请求异常",exception);

        if (exception instanceof BusinessException) {
            BusinessException e = (BusinessException) exception;
            return Result.response(e.getResultCode());
        }

        if (StringUtils.isBlank(exception.getMessage())) {
            return Result.errorCodeMessage(ResultCode.EXCEPTION.getCode(),"空指针异常");
        }

        return Result.errorCodeMessage(ResultCode.EXCEPTION.getCode(), exception.getMessage());

    }

}

 

以上是关于基础组件-自定义异常和异常拦截的主要内容,如果未能解决你的问题,请参考以下文章

Struts2自定义拦截器处理全局异常

Java自定义异常类以及异常拦截器

重温SSM框架系列9 - SpringMVC中的拦截器和异常处理

简单的实现登录拦截及统一异常处理(自定义异常)

SpringBoot+拦截器+自定义异常+自定义注解+全局异常处理简单实现接口权限管理...

处理 Kotlin Coroutines 中自定义 okhttp 拦截器引发的异常