SpringBoot中有一个ControllerAdvice
的注解,使用该注解表示开启了全局异常的捕获,我们只需在自定义一个方法使用ExceptionHandler
注解然后定义捕获异常的类型即可对这些捕获的异常进行统一的处理。
全局异常处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| @ControllerAdvice public class MyExceptionHandler {
@ApiOperation("处理空指针的异常") @ExceptionHandler(value =NullPointerException.class) @ResponseBody public ResultBody npeHandler(Exception e) { logger.error("发生空指针异常!原因是:",e); return Result.fail(null).message("执行了全局处理异常"); return ResultBody.error(CommonEnum.BODY_NOT_MATCH); }
@ApiOperation("处理其他异常") @ExceptionHandler(value =Exception.class) @ResponseBody public ResultBody exceptionHandler(HttpServletRequest req, Exception e){ logger.error("未知异常!原因是:",e); return ResultBody.error(CommonEnum.INTERNAL_SERVER_ERROR); }
}
|
统一返回枚举类
1 2 3 4 5 6
| public interface BaseErrorInfoInterface{
public String getResultCode() public String getResultMsg()
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| public enum CommonEnum implements BaseErrorInfoInterface{ SUCCESS("200", "成功!"), BODY_NOT_MATCH("400","请求的数据格式不符!"), SIGNATURE_NOT_MATCH("401","请求的数字签名不匹配!"), NOT_FOUND("404", "未找到该资源!"), INTERNAL_SERVER_ERROR("500", "服务器内部错误!"), SERVER_BUSY("503","服务器正忙,请稍后再试!") ;
private String resultCode;
private String resultMsg;
CommonEnum(String resultCode, String resultMsg) { this.resultCode = resultCode; this.resultMsg = resultMsg; }
public String getResultCode() { return resultCode; }
public String getResultMsg() { return resultMsg; }
}
|
统计返回结果类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
| @ApiModel(value = "全局统一返回结果") public class ResponseBean<T>{
@ApiModelProperty(value = "返回码") private String code;
@ApiModelProperty(value = "返回消息") private String message;
@ApiModelProperty(value = "返回数据") private T data;
public ResponseBean() { }
public ResponseBean(BaseErrorInfoInterface errorInfo) { this.code = errorInfo.getResultCode(); this.message = errorInfo.getResultMsg(); }
public String getCode() { return code; }
public void setCode(String code) { this.code = code; }
public String getMessage() { return message; }
public void setMessage(String message) { this.message = message; }
public T getData() { return data; }
public void setData(T data) { this.data= data; }
public static ResponseBean success() { return success(null); }
public static ResponseBean success(T data) { ResponseBean rb = new ResponseBean(); rb.setCode(CommonEnum.SUCCESS.getResultCode()); rb.setMessage(CommonEnum.SUCCESS.getResultMsg()); rb.setData(data); return rb; }
public static ResponseBean error(BaseErrorInfoInterface errorInfo) { ResponseBean rb = new ResponseBean(); rb.setCode(errorInfo.getResultCode()); rb.setMessage(errorInfo.getResultMsg()); rb.setData(null); return rb; }
public static ResponseBean error(String code, String message) { ResponseBean rb = new ResponseBean(); rb.setCode(code); rb.setMessage(message); rb.setData(null); return rb; }
public static ResponseBean error( String message) { ResponseBean rb = new ResponseBean(); rb.setCode("-1"); rb.setMessage(message); rb.setData(null); return rb; }
@Override public String toString() { return JSONObject.toJSONString(this); }
}
|