Version: Next

全局统一响应与自定义异常

info

全局统一响应:AjaxResponse

自定义异常:CustomException

全局统一响应

info

在开发过程中,Controller需要确定向前端返回数据的类型,这个数据类型非常的混乱,可以用的类型有很多。比如:非前后端分离情况下,一般用String或者ModelAndView;前后端分离情况下,又可能是String、HashMap、List,总之非常乱

我们应当定义一种统一的响应类型,写成一个类,来规范化,这就是AjaxResponse

  • 提供一些静态方法来方便的进行具体的响应
  • 可以规范的为前端提供HTTP状态码
  • 携带成功或出错时的提示信息
  • 异常时,使用规范的异常抛出
AjaxResponse.java
/**
* 接口数据请求统一响应数据结构
*/
@Data
public class AjaxResponse {
private boolean isok;
private int code;
private String message;
private Object data;
private AjaxResponse() {
}
//请求出现异常时的响应数据封装
public static AjaxResponse error(CustomException e) {
AjaxResponse resultBean = new AjaxResponse();
resultBean.setIsok(false);
resultBean.setCode(e.getCode());
if (e.getCode() == CustomExceptionType.USER_INPUT_ERROR.getCode()) {
resultBean.setMessage(e.getMessage());
} else if (e.getCode() == CustomExceptionType.SYSTEM_ERROR.getCode()) {
resultBean.setMessage(e.getMessage() + ",请将该异常信息发送给管理员!");
} else {
resultBean.setMessage("系统出现未知异常,请联系管理员!");
}
//TODO 这里最好将异常信息持久化
return resultBean;
}
//请求出现异常时的响应数据封装
public static AjaxResponse error(CustomExceptionType customExceptionType,
String errorMessage) {
AjaxResponse resultBean = new AjaxResponse();
resultBean.setIsok(false);
resultBean.setCode(customExceptionType.getCode());
resultBean.setMessage(errorMessage);
return resultBean;
}
//请求处理成功时的数据响应
public static AjaxResponse success() {
AjaxResponse resultBean = new AjaxResponse();
resultBean.setIsok(true);
resultBean.setCode(200);
resultBean.setMessage("success");
return resultBean;
}
//请求处理成功,并响应结果数据
public static AjaxResponse success(Object data) {
AjaxResponse resultBean = AjaxResponse.success();
resultBean.setData(data);
return resultBean;
}
}

自定义异常

为了更好的使用上面的AjaxResponse,需要自己定义异常,这个异常包含了自定义的服务器端错误状态码和异常信息,可以规范化的抛出和响应给前端

自定义异常枚举类

CustomExceptionTyoe
public enum CustomExceptionType {
USER_INPUT_ERROR(400,"用户输入异常"),
SYSTEM_ERROR (500,"系统服务异常"),
OTHER_ERROR(999,"其他未知异常");
CustomExceptionType(int code, String typeDesc) {
this.code = code;
this.typeDesc = typeDesc;
}
private String typeDesc;//异常类型中文描述
private int code; //code
public String getTypeDesc() {
return typeDesc;
}
public int getCode() {
return code;
}
}

自定义异常类

public class CustomException extends RuntimeException {
//异常错误编码
private int code ;
//异常信息
private String message;
private CustomException(){}
public CustomException(CustomExceptionType exceptionTypeEnum,
String message) {
this.code = exceptionTypeEnum.getCode();
this.message = message;
}
public int getCode() {
return code;
}
@Override
public String getMessage() {
return message;
}
}