Spring Boot - 전역 캡 처 이상

1. 전역 캡 처 이상: 전역 캡 처 이상 을 하면 실행 중인 오 류 를 캡 처 할 수 있 습 니 다. 이 오류 정 보 를 사용자 에 게 되 돌려 주지 않 고 처리 할 수 있 습 니 다.
2. 코드 는 다음 과 같다.
1. 매 거 진 종 류 를 사용자 정의 하여 통일 적 으로 관리 합 니 다.
/**
 *     :        ,          
 */

public enum ResultEnum {

    SUCCESS(0, "  "),
    FAILURE(1, "  "),
    /*     :10001-19999 */
    PARAM_IS_INVALID(10001, "    "),
    PARAM_IS_BLANK(10002, "    "),
    PARAM_TYPE_BIND_ERROR(10003, "      "),
    PARAM_NOT_COMPLETE(10004, "    "),

    /*     :20001-29999*/
    USER_NOT_LOGGED_IN(20001, "     "),
    USER_LOGIN_ERROR(20002, "          "),
    USER_ACCOUNT_FORBIDDEN(20003, "      "),
    USER_NOT_EXIST(20004, "     "),
    USER_HAS_EXISTED(20005, "     "),

    /*     :30001-39999 */
    SPECIFIED_QUESTIONED_USER_NOT_EXIST(30001, "       "),

    /*     :40001-49999 */
    SYSTEM_INNER_ERROR(40001, "    ,     "),

    /*     :50001-599999 */
    RESULE_DATA_NONE(50001, "     "),
    DATA_IS_WRONG(50002, "    "),
    DATA_ALREADY_EXISTED(50003, "     "),

    /*     :60001-69999 */
    INTERFACE_INNER_INVOKE_ERROR(60001, "          "),
    INTERFACE_OUTTER_INVOKE_ERROR(60002, "          "),
    INTERFACE_FORBID_VISIT(60003, "       "),
    INTERFACE_ADDRESS_INVALID(60004, "      "),
    INTERFACE_REQUEST_TIMEOUT(60005, "      "),
    INTERFACE_EXCEED_LOAD(60006, "      "),

    /*     :70001-79999 */
    PERMISSION_NO_ACCESS(70001, "     ");

    private Integer code;

    private String msg;

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

    public Integer code() {
        return this.code;
    }

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

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

}

2. 되 돌아 오 는 도구 클래스 를 가 져 옵 니 다 (일반적인 패 키 징 수정 도 가능 합 니 다)
/**
 * http          
 */
public class Result {

    /**
     *    .
     */
    private Integer code;

    /**
     *     .
     */
    private String msg;

    /**
     *      .
     */
    private Object 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 Object getData() {
        return data;
    }

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

    public void setResultCode(ResultEnum code) {
        this.code = code.code();
        this.msg = code.message();
    }

    //                
    public static Result success() {
        Result result = new Result();
        result.setResultCode(ResultEnum.SUCCESS);
        return result;
    }

    //           
    public static Result success(Object data) {
        Result result = new Result();
        result.setResultCode(ResultEnum.SUCCESS);
        result.setData(data);
        return result;
    }

    //                 
    public static Result success(ResultEnum resultEnum, Object data) {
        Result result = new Result();
        result.setResultCode(resultEnum);
        result.setData(data);
        return result;
    }

    //          
    public static Result failure(ResultEnum resultEnum) {
        Result result = new Result();
        result.setResultCode(resultEnum);
        return result;
    }

    //              
    public static Result failure(ResultEnum resultEnum, Object data) {
        Result result = new Result();
        result.setResultCode(resultEnum);
        result.setData(data);
        return result;
    }

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

}

3. 전역 이상 처리 사용자 정의
/**
 *     :         
 *      RuntimeException    Spring               
 */

public class CustomizeException extends RuntimeException {

    private Integer code;

    public CustomizeException(ResultEnum resultEnum) {
        super(resultEnum.getMsg());
        this.code = resultEnum.getCode();
    }

    //  msg           
    public CustomizeException(ResultEnum resultEnum, String msg) {
        super(msg);
        this.code = resultEnum.getCode();
    }

    public Integer getCode() {
        return code;
    }

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

}


4. 전역 이상 포획:
import com.itcast.exception.CustomizeException;
import com.itcast.util.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

/**
 *     :     
 */

@ControllerAdvice
@Slf4j
public class ExceptionHandle {

    //     
    @ExceptionHandler(value = Exception.class)
    //             ,             ,            ,         ,         
    //       ,           ,          。  ResponseStatus  
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public Result handle(Exception e) {
        //                 
        if (e instanceof CustomizeException) {
            CustomizeException girlException = (CustomizeException) e;
            log.error("【     】{}", girlException.getMessage());
            return Result.error(girlException.getCode(), girlException.getMessage());
        } else {
            log.error("【    】{}", e);
            return Result.error(-1, "    ");
        }
    }
}


5. 테스트
 @ApiOperation(value = "        ", notes = "        ")
    @PutMapping("code")
    @ResponseBody
    public Result ApiCode(@RequestBody Student student) {
            if (student.getAge() == 0) {
                throw new CustomizeException(ResultEnum.FAILURE, "  ");
        }
        return Result.success(student);
    }

사실 통용 되 는 반환 대상 을 정의 하 는 방법 은 여러 가지 방법 이 있 습 니 다. 이런 방법 은 중간 규칙 에 속 하 는 것 입 니 다. 참고 하 시기 바 랍 니 다. 개인 노트 가 조회 되 었 다 면 선배 님 들 의 지적 이 완 선 된 것 을 환영 합 니 다.

좋은 웹페이지 즐겨찾기