1. 程式人生 > 其它 >Spring下編寫統一的異常處理類

Spring下編寫統一的異常處理類

技術標籤:java

統一的異常處理

  • @ControllerAdvice
  • 1)、編寫異常處理類,使用@ControllerAdvice。
  • 2)、使用@ExceptionHandler標註方法可以處理的異常。
  • 第一步:抽取一個異常處理類ExceptionControllerAdvice:
/**
*集中處理異常
*/
//註明此異常處理類需要處理哪個包出現的異常
@RestControllerAdvice(basePackages = "com.controller")
/*@org.springframework.web.bind.annotation.ControllerAdvice*/
public class ControllerAdvice { //感知異常ExceptionHandler,告訴SpringMVC此方法可以處理哪些異常 @ExceptionHandler(value = MethodArgumentNotValidException.class) public R handleValidException(MethodArgumentNotValidException e){ log.error("資料校驗出現問題{},異常型別{}",e.getMessage(),e.getClass()); BindingResult bindingResult =
e.getBindingResult(); Map<String, String> errorMap = new HashMap<>(); bindingResult.getFieldErrors().forEach((fieldError)->{ errorMap.put(fieldError.getField(),fieldError.getDefaultMessage()); }); return R.error(BizCodeEnume.VAILD_EXCEPTION.
getCode(),BizCodeEnume.VAILD_EXCEPTION.getMsg()).put("data",errorMap); } @ExceptionHandler(value = Throwable.class) public R handleException(Throwable t){ return R.error(BizCodeEnume.UNKNOW_EXCEPTION.getCode(),BizCodeEnume.UNKNOW_EXCEPTION.getMsg()); } }

注意:此出第一個方法傳參MethodArgumentNotValidException 是我專案報的異常,第二個方法即處理所以異常
在這裡插入圖片描述

BizCodeEnume類(指定錯誤編碼和錯誤提示資訊):

public enum BizCodeEnume {
    UNKNOW_EXCEPTION(10000,"系統未知異常"),
    VAILD_EXCEPTION(10001,"引數格式校驗失敗");
    private int code;
    private String msg;
    BizCodeEnume(int code,String msg){
        this.code = code;
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}