Result 객체 + 통합 예외 처리

4175 단어 예외 처리
1. 오류 비정상 코드 디자인
1.1 통합 비정상 코드 인터페이스 정의
/**
 *          
 *
 * @author    
 * @date 2018/11/11
 */

public interface ExceptionEnum {

    /**
     *       
     *
     * @return    
     */
    Integer getCode();

    /**
     *       
     *
     * @return     
     */
    String getMessage();
}

1.2. 일반 예외 오류 코드 Enum
/**
 *        
 */
public enum ResultMsgEnum implements ExceptionEnum {

    //     
    SUCCESS(200,"  "),
    //        
    ERROR(500,"  ");

    private int code;
    private String message;

    ResultMsgEnum(int value, String text) {
        this.code = value;
        this.message = text;
    }

    @Override
    public Integer getCode() {
        return code;
    }

    @Override
    public String getMessage() {
        return message;
    }
}

1.3. 비즈니스 예외 오류 코드 Enum
/**
 * CMS        5001**
 */
public enum CmsErrorCodeEnum implements ExceptionEnum {
    //     
    Article_NOT_EXIST(500100,"      ");


    CmsErrorCodeEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    private Integer code;
    private String message;

    @Override
    public Integer getCode() {
        return code;
    }

    @Override
    public String getMessage() {
        return message;
    }
}

2. Result 객체 설계
/**
 *     result
 */
@Data
public class ZingResult implements Serializable {

    private int code;
    private String msg;
    private T data;


    private ZingResult() {
        this.code = ResultMsgEnum.SUCCESS.getCode();
        this.msg = ResultMsgEnum.SUCCESS.getMessage();
    }

    private ZingResult(T data) {
        this.code = ResultMsgEnum.SUCCESS.getCode();
        this.msg = ResultMsgEnum.SUCCESS.getMessage();
        this.data = data;
    }


    private ZingResult(ExceptionEnum exceptionEnum) {
        this.code = exceptionEnum.getCode();
        this.msg = exceptionEnum.getMessage();
    }

    public static ZingResult success() {
        return new ZingResult();
    }

    public static  ZingResult success(T data) {
        return new ZingResult<>(data);
    }

    public static  ZingResult error(ExceptionEnum exceptionEnum) {
        return new ZingResult<>(exceptionEnum);
    }

}

3. 이상 처리 통일
3.1 이상 부류
/**
 *     
 *
 * @author    
 * @date 2018/11/11
 */

@Getter
public class ZingException extends RuntimeException {

    private Integer code;
    private String message;

    public ZingException(ExceptionEnum exceptionEnum){
        super(exceptionEnum.getMessage());
        this.code = exceptionEnum.getCode();
        this.message = exceptionEnum.getMessage();
    }
}

3.2 업무 이상 클래스
/**
 *         
 */
@Getter
public class BusinessException extends ZingException {
    private ExceptionEnum exceptionEnum;

    public BusinessException(ExceptionEnum exceptionEnum) {
        super(exceptionEnum);
        this.exceptionEnum = exceptionEnum;
    }
}

3.3 이상 차단 처리


@Slf4j
@ResponseBody
@ControllerAdvice
public class GlobalExceptionHandler {


    /**
     *         
     *
     * @param request   
     * @param e           
     * @return       
     */
    @ExceptionHandler(Exception.class)
    public ZingResult cmsException(HttpServletRequest request, Exception e) {
        log.error("   url {}      ,     :", request.getRequestURI(), e);
        return ZingResult.error(ResultMsgEnum.ERROR);
    }


    /**
     *   CMS    
     *
     * @param request   
     * @param e           
     * @return       
     */
    @ExceptionHandler(CmsBusinessException.class)
    public ZingResult cmsBusinessException(HttpServletRequest request, CmsBusinessException e) {
        log.error("   url {}      ,     :", request.getRequestURI(), e);
        return ZingResult.error(e.getExceptionEnum());
    }
}

4. 사용 예
if(CollectionUtils.isEmpty(articleList)){
    throw new CmsBusinessException(CmsErrorCodeEnum.ARTICLE_NOT_EXIST);
}

좋은 웹페이지 즐겨찾기