SpringBoot 의 통일 이상 처리

일괄 처리 반환 결과
백 스테이지 가 개발 과정 에서 제 이 슨 대상 을 전단 으로 되 돌려 주어 야 한다.이상 이 발생 했 을 때, 우 리 는 마찬가지 로 이상 을 json 형식 에 따라 되 돌려 주 기 를 희망 한다. 전단 은 json 데 이 터 를 되 돌려 주 는 상태 코드 와 정보 에 따라 상응하는 표 시 를 할 수 있다.
이 럴 때 는 Http 의 가장 바깥쪽 패 키 징 대상 을 쓰 고 되 돌아 오 는 대상 데 이 터 를 통일 해 야 합 니 다.Result.java
public class Result {

    private Integer code;
    private String msg;
    private T data;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

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

반환 데이터 대상 에 따라 결과 템 플 릿 도구 류 ResultUtil. 자바 를 패키지 할 수 있 습 니 다.
public class ResultUtil {

    public static Result getOK(Object object){
        Result result = new Result();
        result.setCode(0);
        result.setMsg("  ");
        result.setData(object);
        return result;
    }

    public static Result getOK(){
        return getOK(null);
    }

    public static Result getError(Integer code,String msg){
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }
}

백 스테이지 에서 전단 에서 전 달 된 데 이 터 를 판단 하고 해당 하 는 결 과 를 되 돌려 줄 때 이상 처 리 를 통일 할 수 있 습 니 다.결 과 를 던 지고 직접 던 지면 결 과 는 이전에 우리 가 돌아 온 제 이 슨 형식 이 아니 라 이런 처리 도 우호 적 이지 않다.우 리 는 이상 한 캡 처 를 통 해 결과 템 플 릿 류 (ResultUtil. 자바) 를 호출 하면 봉 인 된 제 이 슨 데 이 터 를 되 돌려 줄 수 있 습 니 다.
이상 포획 클래스 ExceptionHandle. java
import com.demo.result.Result;
import com.demo.result.ResultUtil;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
public class ExceptionHandle {
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Result handle(Exception e){
        return ResultUtil.getError(100,e.getMessage());
    }

}

기본 Exception 을 이용 하여 결 과 를 던 지 는 것 이 라면 되 돌아 오 는 상태 코드 (code) 는 매번 같은 값 이 고 전단 처리 가 쉽 지 않 습 니 다.이렇게 하려 면 Exception 을 사용자 정의 해 야 합 니 다.여기 서 Exception 을 계승 할 수 없습니다. springBoot 는 Runtime Exception 을 계승 하 는 것 만 지원 하기 때 문 입 니 다.
사용자 정의 예외 클래스 UserException. java
public class UserException extends RuntimeException {

    private Integer code;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public UserException(Integer code,String message) {
        super(message);
        this.code = code;
    }
}

이 때 이상 포획 클래스 ExceptionHandle. java 도 변경 이 필요 합 니 다.
import com.demo.exception.UserException;
import com.demo.result.Result;
import com.demo.result.ResultUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
public class ExceptionHandle {

    //        
    private final static Logger logger = LoggerFactory
                                            .getLogger(ExceptionHandle.class);

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Result handle(Exception e){
        if(e instanceof UserException){
            UserException userException = (UserException)e;
            return ResultUtil.getError(userException.getCode()
                                               ,userException.getMessage());
        }else{
            logger.error("【    】={}",e);
            return ResultUtil.getError(-1,"    !");
        }
    }

}

결과 에 대한 통일 적 인 처 리 를 통 해 데 이 터 를 전단 으로 우호 적 으로 되 돌 릴 수 있 지만 지금 은 데 이 터 를 되 돌 릴 때마다 상태 코드 와 정 보 는 호출 방법 에서 다시 정의 해 야 한 다 는 문제 가 발견 되 었 습 니 다. 이렇게 하면 상태 가 많 고 조회 와 수정 이 어렵 습 니 다.이 를 위해 매 거 진 클래스 를 정의 할 수 있 으 며, code 와 msg 를 통일 적 으로 관리 할 수 있 습 니 다.ResultEnum.java
public enum ResultEnum {
    /**
     *   . ErrorCode : 0
     */
    SUCCESS("0","  "),
    /**
     *     . ErrorCode : 01
     */
    UnknownException("01","    "),
    /**
     *     . ErrorCode : 02
     */
    SystemException("02","    "),
    /**
     *     . ErrorCode : 03
     */
    MyException("03","    "),
    /**
     *      . ErrorCode : 04
     */
    InfoException("04", "     "),
    /**
     *        . ErrorCode : 020001
     */
    DBException("020001","       "),
    /**
     *       . ErrorCode : 040001
     */
    ParamException("040001","      ");

    private String code;

    private String msg;

    ResultEnum(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}

좋은 웹페이지 즐겨찾기