package com.weicon.common.exception;
import lombok.Value;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
/**
* 通用的业务异常
* @author Administrator
*/
@ResponseStatus(HttpStatus.UNPROCESSABLE_ENTITY)
public class BusinessException extends RuntimeException {
/** 通用异常信息 */
private static final String GENERAL_DESC = "意料之外的异常";
/** 用以展示的异常描述 */
private ExceptionDescribe describe;
/* 引用父类的构造方法 */
public BusinessException() {
super();
this.describe = ExceptionDescribe.of(GENERAL_DESC, BusinessExceptionCode.GENERAL);
}
public BusinessException(String desc) {
super(desc);
this.describe = ExceptionDescribe.of(desc, BusinessExceptionCode.GENERAL);
}
public BusinessException(String desc, Throwable cause) {
super(desc, cause);
this.describe = ExceptionDescribe.of(desc, BusinessExceptionCode.GENERAL);
}
public BusinessException(Throwable cause) {
super(cause);
this.describe = ExceptionDescribe.of(cause.getMessage(), BusinessExceptionCode.GENERAL);
}
protected BusinessException(String message, Throwable cause, boolean enableSuppression,
boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
this.describe = ExceptionDescribe.of(message, BusinessExceptionCode.GENERAL);
}
/* 自己的构造方法 */
public BusinessException(String desc, BusinessExceptionCode code) {
super(desc);
this.describe = ExceptionDescribe.of(desc, code);
}
public BusinessException(String desc, Throwable cause, BusinessExceptionCode code) {
super(desc, cause);
this.describe = ExceptionDescribe.of(desc, code);
}
/* 内部类 */
/** 异常分类代码 */
public enum BusinessExceptionCode {
/** 通用代码 */
GENERAL(0x0000_0000L),
;
/** 指定的异常表征码 */
private final long code;
BusinessExceptionCode(long s) {
this.code = s;
}
}
/** 异常描述VO */
@Value(staticConstructor = "of")
private static class ExceptionDescribe {
/** 文字描述 */
private String desc;
/** 分类代码 */
private BusinessExceptionCode code;
}
}