最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot 2 統(tǒng)一異常處理過程解析

 更新時間:2019年09月05日 08:21:05   作者:桌前明月  
這篇文章主要介紹了SpringBoot 2 統(tǒng)一異常處理過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

統(tǒng)一異常處理相關(guān)注解介紹

@ControllerAdvice

聲明在類上用于指定該類為控制增強器類,如果想聲明返回的結(jié)果為 RESTFull 風(fēng)格的數(shù)據(jù),需要在聲明 @ExceptionHandler 注解的方法上同時加 上 @ResponseBody

@RestControllerAdvice

聲明在類上用于指定該類為控制增強器類。并聲明返回的結(jié)果為 RESTFull 風(fēng)格的數(shù)據(jù),無需在聲明@ExceptionHandler 注解的方法上加@ResponseBody

@ExceptionHandler

聲明在方法上用于指定需要統(tǒng)一攔截的異常。例如:@ExceptionHandler(value = Exception.class)

實戰(zhàn)操作

定義消息類:

定義 RESTFull 返回 JSON 數(shù)據(jù)的消息類,其中包含成員變量如下:

  • code:錯誤碼,0表示沒有異常信息。
  • message:異常提示信息。
  • date:無異常是返回具體內(nèi)容信息。
public class ReturnMessage<T> {
  private Integer code;//錯誤碼
  private String message;//提示信息
  private T date;//返回具體內(nèi)容
  public ReturnMessage(Integer code, String message, T date) {
    super();
    this.code = code;
    this.message = message;
    this.date = date;
  }
  //省略get and set方法  
}

** 消息類處理工具類:**

主要是用來處理成功或失敗消息處理,該工具類主要包含是3個方法 :

  1. 成功處理含實體數(shù)據(jù)
  2. 成功處理 沒有實體數(shù)據(jù)
  3. 失敗處理

具體代碼如下:

public class ReturnMessageUtil {
  /**
   * 無異常 請求成功并有具體內(nèi)容返回
   * @param object
   * @return
   */
  public static ReturnMessage<Object> sucess(Object object) {
    ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",object);
    return message;
  }
  /**
   * 無異常 請求成功并無具體內(nèi)容返回
   * @return
   */
  public static ReturnMessage<Object> sucess() {
    ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",null);
    return message;
  }
  /**
   * 有自定義錯誤異常信息
   * @param code
   * @param msg
   * @return
   */
  public static ReturnMessage<Object> error(Integer code,String msg) {
    ReturnMessage<Object> message = new ReturnMessage<Object>(code,msg,null);
    return message;
  }
 }

自定義異常類:

我們通過自定義系統(tǒng)異常類來完成校驗相關(guān)的操作,自定義系統(tǒng)異常類通過繼承 RuntimeException ,然后聲明名稱為 code 的成員變量來表示不同類型異常。

主要是用于異常攔截后獲取自定義異常的 code ,并將code 設(shè)置到消息類中。

public class SbException extends RuntimeException{
  private Integer code; 
  public Integer getCode() {
    return code;
  }
  public void setCode(Integer code) {
    this.code = code;
  }  
  public SbException(Integer code,String message) {
    super(message);
    this.code = code;
  }  
}

定義統(tǒng)一異常攔截類:

通過聲明 @RestControllerAdvice 表示該類為 RESTFul 風(fēng)格的異常處理控制增強器類,在 handle 方法聲明 @ExceptionHandler 并在該注解中指定要攔截的異常類。具體代碼如下:

@RestControllerAdvice
public class ExceptionHandle {
  private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);
  
  @ExceptionHandler(value = Exception.class)
  public ReturnMessage<Object> handle(Exception exception) {
    if(exception instanceof SbException) {
      SbException sbexception = (SbException)exception;
      return ReturnMessageUtil.error(sbexception.getCode(), sbexception.getMessage());
    }else {
      logger.error("系統(tǒng)異常 {}",exception);
      return ReturnMessageUtil.error(-1, "未知異常"+exception.getMessage());
    }
  }
}

測試

分別測試自定義異常和系統(tǒng)異常,通過 /error/custome 測試自定義異常,通過 /error/unknown 測試未知的系統(tǒng)異常。具體代碼如下:

@RestController
@RequestMapping("/error")
public class DemoException {  
  @GetMapping(value = "custome")
  public void customException() {
    SbException sbe = new SbException(100, "這個是自定義異常!");
    throw sbe;
  }
  @GetMapping(value = "unknown")
  public void unknownException() {
    int i = 0;
    int b = 1/i;
  }
}

測試結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

习水县| 芮城县| 家居| 安岳县| 舒兰市| 团风县| 娱乐| 濮阳市| 台山市| 天等县| 英吉沙县| 如皋市| 香格里拉县| 平舆县| 隆安县| 鄢陵县| 永胜县| 沾益县| 多伦县| 贺兰县| 桐梓县| 泰顺县| 朝阳县| 西藏| 定结县| 宁明县| 桓台县| 库伦旗| 临洮县| 麻江县| 武功县| 沐川县| 铜鼓县| 基隆市| 原阳县| 太湖县| 博乐市| 宁南县| 龙南县| 吉木萨尔县| 开阳县|