SpringMVC 의 전역 이상 처리

@ Controller Advice 사용
프로젝트 를 하 는 데 일반적으로 전역 적 으로 이상 하 게 통일 적 으로 처리 되 는 클래스 가 있다 는 것 을 잘 알 고 있 습 니 다. 그러면 이 종 류 는 Spring 에서 @ Controller Advice 로 이 루어 질 수 있 습 니 다. @Controller Advice, 이것 은 매우 유용 한 주해 입 니 다. 말 그대로 이것 은 강 화 된 Controller 입 니 다.이 Controller 를 사용 하면 세 가지 기능 을 실현 할 수 있 습 니 다.
전역 이상 처리 전역 데이터 바 인 딩 전역 데이터 예비 처리 가 이 세 가지 기능 을 유연 하 게 사용 하면 많은 작업 을 간소화 할 수 있 습 니 다. 주의해 야 할 것 은 이것 은 SpringMVC 가 제공 하 는 기능 으로 Spring Boot 에서 직접 사용 할 수 있 습 니 다.
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(exception.getResultEnum(), null);
        }
        if(e instanceof BindException){
            // @Valid       
            BindException bindException = (BindException)e;
            List errors = bindException.getAllErrors();
            List errorMessages = new ArrayList<>();
            for (ObjectError objectError : errors){
                errorMessages.add(objectError.getDefaultMessage());
            }

            return Result.error("-300", e.getMessage());
        } else {
            logger.error("!!!    !!!", e);
            return new Result(DictionaryEnum.UNKNOW_ERROR, null);
        }
    }
}

@ ExceptionHandler 주 해 는 이상 한 처리 유형 을 가리 키 는 데 사 용 됩 니 다. 모든 이상 을 포착 합 니 다.그 다음 에 이상 유형의 판단 을 통 해 해당 하 는 처리 와 패 키 징 을 하고 사용자 정의 해당 클래스 와 사용자 정의 이상 류 로 매 거 진 구 조 를 되 돌려 줍 니 다. 이 는 실제 상황 에 따라 스스로 변경 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기