欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

@ControllerAdvice

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

@RestControllerAdvice

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

@ExceptionHandler

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

實(shí)戰(zhàn)操作

定義消息類:

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

  • code:錯(cuò)誤碼,0表示沒有異常信息。
  • message:異常提示信息。
  • date:無異常是返回具體內(nèi)容信息。
public class ReturnMessage<T> {
  private Integer code;//錯(cuò)誤碼
  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個(gè)方法 :

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

具體代碼如下:

public class ReturnMessageUtil {
  /**
   * 無異常 請(qǐng)求成功并有具體內(nèi)容返回
   * @param object
   * @return
   */
  public static ReturnMessage<Object> sucess(Object object) {
    ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",object);
    return message;
  }
  /**
   * 無異常 請(qǐng)求成功并無具體內(nèi)容返回
   * @return
   */
  public static ReturnMessage<Object> sucess() {
    ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",null);
    return message;
  }
  /**
   * 有自定義錯(cuò)誤異常信息
   * @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)異常類來完成校驗(yàn)相關(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)格的異常處理控制增強(qiá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());
    }
  }
}

測(cè)試

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

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

測(cè)試結(jié)果:

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

相關(guān)文章

  • SpringCloud消息總線Bus配置中心實(shí)現(xiàn)過程解析

    SpringCloud消息總線Bus配置中心實(shí)現(xiàn)過程解析

    這篇文章主要介紹了SpringCloud消息總線Bus配置中心實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Spring?Cloud?Gateway?服務(wù)網(wǎng)關(guān)的部署與使用詳細(xì)講解

    Spring?Cloud?Gateway?服務(wù)網(wǎng)關(guān)的部署與使用詳細(xì)講解

    這篇文章主要介紹了Spring?Cloud?Gateway?服務(wù)網(wǎng)關(guān)的部署與使用詳細(xì)介紹,本文給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • 詳解java生成json字符串的方法

    詳解java生成json字符串的方法

    本篇文章主要介紹了java生成json字符串的方法,包括map對(duì)象轉(zhuǎn)換成json對(duì)象,list轉(zhuǎn)換成json,json轉(zhuǎn)換成list和map,有興趣的可以了解一下。
    2017-01-01
  • Idea安裝及涉及springboot詳細(xì)配置的圖文教程

    Idea安裝及涉及springboot詳細(xì)配置的圖文教程

    這篇文章主要介紹了Idea安裝及涉及springboot詳細(xì)配置,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Spring Boot中防止遞歸查詢的兩種方式

    Spring Boot中防止遞歸查詢的兩種方式

    這篇文章主要給大家介紹了關(guān)于Spring Boot中防止遞歸查詢的兩種方式,兩種方式分別是在application.properties中配置和在entity中添加注解,都給出了詳細(xì)的示例代碼,需要的朋友們下面來一起看看吧。
    2017-06-06
  • SpringMVC @RequestBody自動(dòng)轉(zhuǎn)json Http415錯(cuò)誤的解決

    SpringMVC @RequestBody自動(dòng)轉(zhuǎn)json Http415錯(cuò)誤的解決

    這篇文章主要介紹了SpringMVC @RequestBody自動(dòng)轉(zhuǎn)json Http415錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • SpringBoot中請(qǐng)求參數(shù)綁定及使用詳解

    SpringBoot中請(qǐng)求參數(shù)綁定及使用詳解

    這篇文章主要介紹了SpringBoot中請(qǐng)求參數(shù)綁定及使用詳解,在Web應(yīng)用程序中,請(qǐng)求參數(shù)綁定是非常重要的操作,Spring?Boot框架使得請(qǐng)求參數(shù)綁定變得非常簡單,通過使用注解和預(yù)定義的類可以輕松地實(shí)現(xiàn)此操作,需要的朋友可以參考下
    2023-08-08
  • Mybatis批量插入index out of range錯(cuò)誤的解決(較偏的錯(cuò)誤)

    Mybatis批量插入index out of range錯(cuò)誤的解決(較偏的錯(cuò)誤)

    這篇文章主要介紹了Mybatis批量插入index out of range錯(cuò)誤的解決(較偏的錯(cuò)誤),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring中Bean的生命周期實(shí)例講解

    Spring中Bean的生命周期實(shí)例講解

    這篇文章主要介紹了Spring中Bean的生命周期講解,而Spring中的一個(gè)Bean從開始到結(jié)束經(jīng)歷很多過程,但總體可以分為六個(gè)階段Bean定義、實(shí)例化、屬性賦值、初始化、生存期、銷毀,需要的朋友可以參考下
    2023-08-08
  • 淺談SpringBoot項(xiàng)目打成war和jar的區(qū)別

    淺談SpringBoot項(xiàng)目打成war和jar的區(qū)別

    這篇文章主要介紹了淺談SpringBoot項(xiàng)目打成war和jar的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論