在Springboot中處理異常有兩種解決方案,分別為全局異常處理和局部異常處理。
1:局部異常處理: @Controller + @ExceptionHandler。
2:全局異常處理: @ControllerAdvice + @ExceptionHandler。
那麼接下來我們重點通過代碼講解一下全局異常處理方案。
首先我們定義異常枚舉類,用於後面處理異常時方便傳參。
<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拋出的異常都會被攔截,是不是很簡單呢?喜歡小編的可以關注一下,小編每天更新文章。
閱讀更多 陶陶開心每一天 的文章