springboot下添加全局异常处理和自定义异常处理
生活随笔
收集整理的這篇文章主要介紹了
springboot下添加全局异常处理和自定义异常处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
在spring項目中,優雅處理異常,好處是可以將系統產生的全部異常統一捕獲處理,自定義的異常也由全局異常來捕獲,如果涉及到validator參數校驗器使用全局異常捕獲也是較為方便。
相關代碼:
GlobalExceptionHandler類:
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
/********************************
* @function : 自定義從捕捉
* @parameter : [e:CustomException | 自定義異常]
* @date : 2023/12/5 11:47
********************************/
@ExceptionHandler(value = CustomException.class)
public AjaxResult customExceptionHandler(HttpServletRequest request, CustomException e) {
log.error("業務異常,url:{}, 異常內容:{}" ,request.getRequestURI(), e);
return new AjaxResult(e.getCode() , e.getMessage(), null);
}
/********************************
* @function : 空指針異常捕捉
* @parameter : [e:Exception | 異常]
* @date : 2023/12/5 11:47
********************************/
@ExceptionHandler(value = Exception.class)
public AjaxResult exceptionHandler(HttpServletRequest request, Exception e) {
log.error("服務器內部異常異常,url:{}, 異常內容:{}" ,request.getRequestURI(), e);
return new AjaxResult(500 , e.getMessage(), null);
}
}
自定義異常CustomException類:
@Slf4j
@Data
public class CustomException extends RuntimeException{
//錯誤碼
private int code;
//錯誤信息
private String message;
public CustomException() {
super();
}
public CustomException(ResultCodeEnum resultCodeEnum) {
super(String.valueOf(resultCodeEnum.getCode()));
this.code = resultCodeEnum.getCode();
this.message = resultCodeEnum.getMessage();
}
}
通用返回類:AjaxResult
@Data
public class AjaxResult extends HashMap<String, Object> {
// 狀態碼
private static final String CODE_TAG = "code";
// 返回消息
private static final String MSG_TAG = "message";
// 數據對象
private static final String DATA_TAG = "data";
public AjaxResult(int code, String message, Object data)
{
super.put(CODE_TAG, code);
super.put(MSG_TAG, message);
if (data != null)
{
super.put(DATA_TAG, data);
}
}
/********************************
* @method : success
* @function : 返回成功消息(重載)
* @parameter :
* @return : AjaxResult
********************************/
public static AjaxResult success(){
return new AjaxResult(ResultCodeEnum.SUCCESS.getCode(), ResultCodeEnum.SUCCESS.getMessage(), null);
}
/********************************
* @method : success
* @function : 返回成功消息(重載)
* @parameter : message : String | 返回消息
* @return : AjaxResult
********************************/
public static AjaxResult success(String message){
return new AjaxResult(ResultCodeEnum.SUCCESS.getCode(), message, null);
}
/********************************
* @method : success
* @function : 返回成功消息(重載)
* @parameter : data : Object | 數據對象
* @return : AjaxResult
********************************/
public static AjaxResult success(Object data){
return new AjaxResult(ResultCodeEnum.SUCCESS.getCode(), ResultCodeEnum.SUCCESS.getMessage(), data);
}
/********************************
* @method : success
* @function : 返回成功消息(重載)
* @parameter : message : String | 返回消息
* @parameter : data : Object | 數據對象
* @return : AjaxResult
********************************/
public static AjaxResult success(String message, Object data){
return new AjaxResult(ResultCodeEnum.SUCCESS.getCode(), message, data);
}
/********************************
* @method : failed
* @function : 返回失敗消息(重載)
* @parameter :
* @return : AjaxResult
********************************/
public static AjaxResult failed(){
return new AjaxResult(ResultCodeEnum.FAILED.getCode(), ResultCodeEnum.FAILED.getMessage(), null);
}
/********************************
* @method : failed
* @function : 返回失敗消息(重載)
* @parameter : message : String | 返回消息
* @return : AjaxResult
********************************/
public static AjaxResult failed(String message){
return new AjaxResult(ResultCodeEnum.FAILED.getCode(), message, null);
}
/********************************
* @method : failed
* @function : 返回失敗消息(重載)
* @parameter : resultCodeEnum : ResultCodeEnum | 失敗枚舉類型
* @return : AjaxResult
********************************/
public static AjaxResult failed(ResultCodeEnum resultCodeEnum){
return new AjaxResult(resultCodeEnum.getCode(), resultCodeEnum.getMessage(), null);
}
/********************************
* @method : failed
* @function : 返回失敗消息(重載)
* @parameter : message : String | 返回消息
* @parameter : data : Object | 數據對象
* @return : AjaxResult
********************************/
public static AjaxResult failed(String message, Object data){
return new AjaxResult(ResultCodeEnum.FAILED.getCode(), message, data);
}
/********************************
* @method : failed
* @function : 返回失敗消息(重載)
* @parameter : resultCodeEnum : ResultCodeEnum | 失敗枚舉類型
* @parameter : data : Object | 數據對象
* @return : AjaxResult
********************************/
public static AjaxResult failed(ResultCodeEnum resultCodeEnum, Object data){
return new AjaxResult(resultCodeEnum.getCode(), resultCodeEnum.getMessage(), data);
}
}
枚舉類ResultCodeEnum:
public enum ResultCodeEnum {
// 10??? 通用
SUCCESS(10000,"請求成功"),
FAILED(10008, "請求失敗"),
FAILED_PARAM_ERROR(10009, "參數錯誤"),
...
private Integer code;
private String message;
ResultCodeEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
public int getCode(){
return code;
}
public String getMessage(){
return message;
}
}
使用:
在controller里面判斷值是否異常,如果異常則直接拋出異常不進行執行,終止當前的流程,在service層也可以這樣處理。
public AjaxResult getUserInfo(@RequestParam(value = "userId") Integer userId) {
if (userId == 0) {
throw new CustomException(ResultCodeEnum.NOT_EXIST_USER_ERROR);
}
...
}
再者是一些數值上的錯誤,比如除0,這種情況會被全局異常捕獲,并返回相應的錯誤給到前端
@GetMapping("/test")
public AjaxResult test(){
int i = 60/0;
return AjaxResult.success();
}
總結
以上是生活随笔為你收集整理的springboot下添加全局异常处理和自定义异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css3中-webkit是什么意思
- 下一篇: 微信步数兑换上限是多少(微信公众平台)