异常处理概述
创建自定义异常处理类
系统自带的Exception
比较简单,在现有的基本上,添加异常状态码,这里继续继承的是RuntimeException
而非Exception
:
import com.example.server.enums.CodeEnum;
public class CustomException extends RuntimeException{
private Integer code;
public GirlException(CodeEnum codeEnum) {
super(codeEnum.getMsg());
this.code = codeEnum.getCode();
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
}
拦截控制器异常
创建一个异常处理类,并加处@ExceptionHandler
注解:
import com.example.server.object.ResultObject;
import com.example.server.utils.ResultUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice
public class ExceptionHandle {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResultObject handle(Exception e) {
if (e instanceof CustomException) {
CustomException ce = (CustomException) e;
return ResultUtils.error(ce.getCode(), ce.getMessage());
} else {
return ResultUtils.error(404, "未知错误");
}
}
}
创建异常统返回格式及正常与错误返回状态
统一的返回格式:
public class ResultObject {
private Integer code;
private String msg;
private Object data;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
@Override
public String toString() {
return "ResultObject{" +
"code=" + code +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}
成功与失败的统一输出:
package com.example.server.utils;
import com.example.server.object.ResultObject;
public class ResultUtils {
public static ResultObject success(Object data) {
ResultObject resultObject = new ResultObject();
resultObject.setCode(0);
resultObject.setMsg("SUCCESS");
resultObject.setData(data);
return resultObject;
}
public static ResultObject success() {
return success(null);
}
public static ResultObject error(Integer code, String message) {
ResultObject resultObject = new ResultObject();
resultObject.setCode(code);
resultObject.setMsg(message);
return resultObject;
}
}