Newer
Older
casic-metering-eqpt-xichang / casic-metering-eqpt-api / src / main / java / com / casic / missiles / handler / GlobalExceptionHandler.java
package com.casic.missiles.handler;

import com.casic.missiles.dto.ReturnUtil;

import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.exception.BusinessExceptionEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.connector.ClientAbortException;
import org.springframework.core.annotation.Order;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @Description: 全局异常处理
 * @Author: wangpeng
 * @Date: 2022/11/24 8:50
 */
@Slf4j
@Order(1)
@ControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 业务异常捕获处理
     */
    @ResponseBody
    @ExceptionHandler({BusinessException.class})
    public Object handleError(BusinessException exception) {
        return ReturnUtil.failed(exception.getCode(), exception.getMessage());
    }

    /**
     * 编号重复异常捕获处理
     */
    @ResponseBody
    @ExceptionHandler({DuplicateKeyException.class})
    public Object handleDuplicateKeyException() {
        return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage());
    }

    /**
     * 参数校验失败异常
     */
    @ResponseBody
    @ExceptionHandler({MethodArgumentNotValidException.class})
    public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) {
        return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage());
    }

    @ExceptionHandler(ClientAbortException.class)
    public void handleClientAbortException(ClientAbortException e) {
        // 记录日志,忽略异常
        log.warn("客户端连接被中断:{}。可能的原因可能是客户端刷新、页面关闭或网络问题。", e.getMessage());
    }
}