SpringBoot進階之全局異常處理

在Springboot中處理異常有兩種解決方案,分別為全局異常處理和局部異常處理。

1:局部異常處理: @Controller + @ExceptionHandler。

2:全局異常處理: @ControllerAdvice + @ExceptionHandler。

那麼接下來我們重點通過代碼講解一下全局異常處理方案。


SpringBoot進階之全局異常處理

首先我們定義異常枚舉類,用於後面處理異常時方便傳參。

<code>import lombok.AllArgsConstructor;

import lombok.Getter;

import lombok.NoArgsConstructor;



/**

*異常枚舉

*/

@Getter

@NoArgsConstructor

@AllArgsConstructor

public enum ExceptionEnum {

PRICE_CANNOT_BE_NULL(400,"價格錯誤"),

;

private int code;

private String msg;

}/<code>

定義異常結果VO類,用戶異常結果的返回

<code>import cn.jun.common.enums.ExceptionEnum;

import lombok.Data;

/**

* 自定義異常結果vo類


*/

@Data

public class ExceptionResult {

private int status;

private String message;

private Long timestamp;



public ExceptionResult(ExceptionEnum em) {

this.status=em.getCode();

this.message=em.getMsg();

this.timestamp=System.currentTimeMillis();

}

}/<code>

自定義異常類

<code>import cn.jun.common.enums.ExceptionEnum;

import lombok.AllArgsConstructor;

import lombok.Getter;

import lombok.NoArgsConstructor;



/**

* 自定義異常

* @Description TODO

* @Date 2018/11/911:17

**/

@AllArgsConstructor

@NoArgsConstructor

@Getter

public class LyException extends RuntimeException {

private ExceptionEnum exceptionEnum;

}/<code>

1.4、通用全局異常處理

<code>import cn.jun.common.enums.ExceptionEnum;

import cn.jun.common.exception.LyException;

import cn.jun.common.vo.ExceptionResult;

import org.springframework.http.ResponseEntity;

import org.springframework.web.bind.annotation.ControllerAdvice;



/**

* 通用異常處理

* @Description TODO

* @Date 2018/11/911:12

**/

@ControllerAdvice

public class ExceptionHandler {
\t\t@ExceptionHandler(LyException.class)
\t@ResponseBody
public ResponseEntity<exceptionresult> handleExcepion(LyException e){

ExceptionEnum em = e.getExceptionEnum();

return ResponseEntity.status(em.getCode()).body(new ExceptionResult(e.getExceptionEnum()));

}

}/<exceptionresult>/<code>

好了,這樣只要是LyException拋出的異常都會被攔截,是不是很簡單呢?喜歡小編的可以關注一下,小編每天更新文章。


分享到:


相關文章: