springboot全局异常处理

@RestController
@ControllerAdvice //异常处理管理
public class GlobalExceptionHandler {
    private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    private static final String br = " ";

    @ExceptionHandler(value = MethodArgumentNotValidException.class) //  注解异常捕捉
    @ResponseBody
    public AjaxResponse baseErrorHandler(HttpServletRequest req, MethodArgumentNotValidException e) throws Exception {
        logger.error("---MethodArgumentNotValidException Handler---MethodArgumentNotValidException Host {} invokes url {} ERROR: {}", req.getRemoteHost(), req.getRequestURL(), e.getMessage());
        BindingResult bindingResult = e.getBindingResult();
        List<FieldError> fieldErrors = bindingResult.getFieldErrors();
        StringBuilder errMsgs = new StringBuilder();
        for (FieldError fieldError : fieldErrors) {
            String defaultMessage = fieldError.getDefaultMessage();
            errMsgs.append(defaultMessage).append(br);
        }
        return new AjaxResponse(false, errMsgs.toString(), ErrorEnum.PARAM_NOT_VALID_ERROR.getCode());
    }

    @ExceptionHandler(value = AcRTException.class) // 自定义异常捕捉
    @ResponseBody
    public AjaxResponse acExceptionHandler(HttpServletRequest req, AcRTException e) throws Exception {
        logger.error("---AcRTException Handler---AcRTException Host {} invokes url {} ERROR: {}", req.getRemoteHost(), req.getRequestURL(), JsonLogUtil.formatEx(e));
        return new AjaxResponse(false, e.getMessage(), e.getErrCode());
    }

    @ExceptionHandler(value = AccessDeniedException.class)
    @ResponseBody
    public AjaxResponse exceptionHandler(HttpServletRequest req, AccessDeniedException e) throws Exception {
        logger.error("---Exception Handler---Exception Host {} invokes url {} ERROR: {}", req.getRemoteHost(), req.getRequestURL(), JsonLogUtil.formatEx(e));
        return new AjaxResponse(false, e.getMessage(), ErrorEnum.SYSTEM_ERROR.getCode());
    }

    @ExceptionHandler(value = Exception.class) 
    @ResponseBody
    public AjaxResponse exceptionHandler(HttpServletRequest req, Exception e) throws Exception {
        logger.error("---Exception Handler---Exception Host {} invokes url {} ERROR: {}", req.getRemoteHost(), req.getRequestURL(), JsonLogUtil.formatEx(e));
        return new AjaxResponse(false, "系统异常,请联系管理员!", ErrorEnum.SYSTEM_ERROR.getCode());
    }

    private boolean isAjaxRequest(HttpServletRequest req) {
        String requestedWith = req.getHeader("X-Requested-With");
        boolean isAjaxRequest = requestedWith != null ? "XMLHttpRequest".equals(requestedWith) : false;
        return isAjaxRequest;
    }
}

自定义异常

public class AcRTException extends RuntimeException {

    private ErrorEnum errCode;

    private Object[] msgArgs;

    public AcRTException() {
        super();
    }

    public AcRTException(ErrorEnum errCode, Object... msgArgs) {
        super(LspGenericTokenParser.parse1(errCode.getMessage(), msgArgs));
        this.msgArgs = msgArgs;
        this.errCode = errCode;
    }

    public AcRTException(ErrorEnum errCode, Throwable cause, Object... msgArgs) {
        super(LspGenericTokenParser.parse1(errCode.getMessage(), msgArgs), cause);
        this.errCode = errCode;
    }

    public int getErrCode() {
        return errCode.getCode();
    }

    public Object[] getMsgArgs() {
        return msgArgs;
    }

}

返回方法

public class AjaxResponse {
    private Boolean success = true;
    private String message = "";
    private int errCode;
    private Object data;

    public AjaxResponse() {
    }

    public AjaxResponse(Boolean success, String message, int errCode, Object data) {
        this.success = success;
        this.message = message;
        this.errCode = errCode;
        this.data = data;
    }

    public AjaxResponse(Boolean success, Object data) {
        this.success = success;
        this.message = this.message;
        this.errCode = this.errCode;
        this.data = data;
    }

    public AjaxResponse(Boolean success, String message) {
        this.success = success;
        this.message = message;
        this.errCode = this.errCode;
        this.data = this.data;
    }

    public AjaxResponse(Boolean success, String message, int errCode) {
        this.success = success;
        this.message = message;
        this.errCode = errCode;
        this.data = this.data;
    }

    public int getErrCode() {
        return this.errCode;
    }

    public void setErrCode(int errCode) {
        this.errCode = errCode;
    }

    public Boolean getSuccess() {
        return this.success;
    }

    public void setSuccess(Boolean success) {
        this.success = success;
    }

    public String getMessage() {
        return this.message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return this.data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值