글로벌 SpringMVC 예외 처리

@ControllerAdvice 사용

우리 모두는 클래스가 봄에 @ControllerAdvice을 달성 할 수있는 통합 된 글로벌 예외 처리 클래스를해야합니다 일반적으로 프로젝트를 해야할지.
@ControllerAdvice,이 이름에서 알 수 있듯이,이 컨트롤러의 향상이고, 매우 유용한 코멘트이다. 컨트롤러를 사용하여 세 가지 기능을 달성 할 수있다 :

글로벌 예외 핸들러
바인딩 글로벌 데이터
글로벌 데이터 전처리
작업을 많이 필요로 단순화하는 데 도움이 수있는 이러한 세 가지 기능의 유연한 사용이 SpringMVC가에 봄 부팅에서 직접 사용할 수있는 기능을 제공하는 것을 주목해야합니다.

package com.boss.hr.train.fishkkmybatis.handle;

import com.boss.hr.train.fishkkmybatis.entity.Result;
import com.boss.hr.train.fishkkmybatis.enums.DictionaryEnum;
import com.boss.hr.train.fishkkmybatis.exception.BaseException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.BindException;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.List;

/**
 * ExceptionHandel
 * 全局异常处理类
 *
 * @author fishkk
 * @version 1.0
 * @since 2019/7/27
 */
@ControllerAdvice
public class ExceptionHandle {
    private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);

    /**
      * 全局异常处理
      * 自定义异常  表单验证异常 和 未定义系统异常的处理
      * 转换成Result对象返回
      * @author fishkk
      * @since  2019/7/28
      * @param  e 被捕获的异常
      * @return  Result
      */
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public Result handle(Exception e){
        if (e instanceof BaseException) {
            // 系统内部异常
            BaseException exception = (BaseException) e;
            return new Result<Object>(exception.getResultEnum(), null);
        }
        if(e instanceof BindException){
            // @Valid表单验证不通过
            BindException bindException = (BindException)e;
            List<ObjectError> errors = bindException.getAllErrors();
            List<String> errorMessages = new ArrayList<>();
            for (ObjectError objectError : errors){
                errorMessages.add(objectError.getDefaultMessage());
            }

            return Result.error("-300", e.getMessage());
        } else {
            logger.error("!!!系统异常!!!", e);
            return new Result<Object>(DictionaryEnum.UNKNOW_ERROR, null);
        }
    }
}

기형의 유형을 표시하는 데 사용 @ExceptionHandler 주석 처리, 우리는 모든 예외를 포착하기 위해 여기에 있습니다. 그런 다음, 대응하는 처리 유형의 이상 판정의 밀봉은 각각의 클래스 정의를 반환 맞춤 예외 클래스 구성 열거,
이는 실제 상황에 따라 라인에서 변경 될 수있다

추천

출처www.cnblogs.com/fishkk/p/11371966.html