@ExceptionHandler(Exception.class)
package com.lozinn.system.config;
import com.lozinn.system.exception.IException;
import com.lozinn.system.exception.MyException;
import com.lozinn.system.exception.ParameterException;
import com.lozinn.system.exception.TokenException;
import com.lozinn.system.myenum.ExceptionCodeEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
@ControllerAdvice
public class MyExceptionHandler {
private Logger logger = LoggerFactory.getLogger("MyExceptionHandler");
@ResponseBody
@ExceptionHandler(Exception.class)
public Map<String, Object> errorHandler(Exception e, HttpServletResponse response){
Map<String, Object> map = new HashMap<>();
if(e instanceof IException){
map.put("code", ((IException) e).getCode());
map.put("msg", e.getMessage());
}else if (e instanceof TokenException) {
map.put("code", ((TokenException) e).getCode());
map.put("msg", e.getMessage());
} else if (e instanceof ParameterException){
map.put("code", ((ParameterException) e).getCode());
map.put("msg", e.getMessage());
} else if (e instanceof MaxUploadSizeExceededException){
map.put("code", ExceptionCodeEnum.MAX_UPLOAD_SIZE_ERROR.getCode());
map.put("msg", ExceptionCodeEnum.MAX_UPLOAD_SIZE_ERROR.getMsg());
} else if (e instanceof MyException){
//自定義的MyException類
map.put("code", ((MyException) e).getCode());
map.put("msg", ((MyException) e).getMsg());
}else {
// String message = e.getMessage();
map.put("code", 500);
// map.put("msg", message == null || message.trim().isEmpty() ? "未知錯誤" : message);
map.put("msg", "服務器錯誤");
}
// 日志記錄
logger.error(e.getMessage(), e);
// 支持跨域
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
return map;
}
}
自定義MyException extends RuntimeException
其中ExceptionCodeEnum 為自定義的枚舉
package com.lozinn.system.exception;
import com.lozinn.system.myenum.ExceptionCodeEnum;
import lombok.Data;
@Data
public class MyException extends RuntimeException {
private String msg ="服務器異常";
private int code = 500;
public MyException(){
super(ExceptionCodeEnum.UNKNOWN.getMsg());
this.msg = ExceptionCodeEnum.UNKNOWN.getMsg();
}
public MyException(ExceptionCodeEnum eEnum, Throwable e){
super(eEnum.getMsg(),e);
this.msg = eEnum.getMsg();
this.code = eEnum.getCode();
}
public MyException(ExceptionCodeEnum eEnum){
this.msg = eEnum.getMsg();
this.code = eEnum.getCode();
}
public MyException(int code,String msg){
this.msg = msg;
this.code = code;
}
public MyException(String exception){
this.msg = exception;
}
}
拋自定義異常及自定義枚舉
if(CollectionUtils.isEmpty(userList)){
throw new MyException(ExceptionCodeEnum.USER_PWD_ERROR);
}
package com.lozinn.system.myenum;
public enum ExceptionCodeEnum {
MAX_UPLOAD_SIZE_ERROR(1002, "超過最大允許上傳的文件大小"),
NOT_ENOUGH_MONEY(1003, "余額不足"),
MALFORMEDJWT_ERROR(1004,"MalformedJwt錯誤"),
TOKEN_EXPIRED_ERROR(1005, "token過期曼尊,請重新登陸"),
TOKEN_CHECK_FAIL(1006, "token驗證失敗粘招,請重新登陸"),
LOCK_ACCOUND(1007, "賬號被鎖定"),
WORKS_IS_VERIFY_ERROR(1008, "當前作品審核中孽拷,無法進行修改"),
PERMISSION_ERROE(1009,"對不起怀喉,你沒有此操作權限"),
USER_PWD_ERROR(1010,"賬號或密碼錯誤!"),
USER_EXIST_ERROR(1011,"該用戶已經存在"),
PARAM_ERROR(1012,"參數(shù)錯誤"),
ERROR_CODE(401,"錯誤代碼401"),
SUCCESS_CODE(200,"響應成功代碼200"),
UNKNOWN(500,"服務器內部錯誤获高,請聯(lián)系管理員");
private int code;
private String msg;
ExceptionCodeEnum(int code, String msg){
this.code = code;
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}