1.定义异常枚举类
public enum MyEnum {
USER_NOT_LOGIN(100, "用户尚未登录"),
USER_OR_PW_ERROR(101, "用户名或密码错误"),
USER_PW_NOT_EMPTY(103, "密码不能为空"),
FAIL(500,"未知错误"),
PRODUCT_IS_NOT_EXIST(601,"产品不存在");
private int status;
private String msg;
private String engMsg;
MyEnum(int status, String msg) {
this.status = status;
this.msg = msg;
}
public int getStatus() {
return status;
}
public String getMsg() {
return msg;
}
}
2.自定义异常类继承RuntimeException
public class CustomException extends RuntimeException{
private int status;
private String msg;
public CustomException(int status, String msg) {
this.status = status;
this.msg = msg;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
3.构建全局异常捕获类
@RestControllerAdvice
public class CustomExceptionHandler {
private static Logger log = LoggerFactory.getLogger(CustomExceptionHandler.class);
public CustomExceptionHandler(){}
@ExceptionHandler({CustomException.class})
public ResponseDataUtil customException(CustomException ex) {
return new ResponseDataUtil(ex.getStatus(),ex.getMsg());
}
@ExceptionHandler(Exception.class)
public ResponseDataUtil otherException(Exception ex, HttpServletRequest request) {
log.error("host:[{}] url:[{}] error:[{}] method:[{}] user:[{}]",
request.getRemoteHost(), request.getRequestURI(), ex.getMessage(), request.getMethod());
log.error(ex.getMessage(), ex);
return new ResponseDataUtil(MyEnum.FAIL.getStatus(),MyEnum.FAIL.getMsg());
}
}
4.创建通用相应对象(返回前端的实体包装类)
public class ResponseDataUtil<T> {
private int status;
private String msg;
private T data;;
public ResponseDataUtil() {
}
public ResponseDataUtil(int status, String msg, T data) {
this.status = status;
this.msg = msg;
this.data = data;
}
public ResponseDataUtil(int status, String msg) {
this.status = status;
this.msg = msg;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
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;
}
}