Result 객체 + 통합 예외 처리
4175 단어 예외 처리
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);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: