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

SpringBoot處理全局統(tǒng)一異常的實現(xiàn)

 更新時間:2020年09月15日 10:40:15   作者:冬眠的山谷  
這篇文章主要介紹了SpringBoot處理全局統(tǒng)一異常的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在后端發(fā)生異常或者是請求出錯時,前端通常顯示如下

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Fri Jun 07 15:38:07 CST 2019
There was an unexpected error (type=Not Found, status=404).
No message available

 對于用戶來說非常不友好。

本文主要講解如何在SpringBoot應用中使用統(tǒng)一異常處理。

實現(xiàn)方式

  • 第一種:使用@ControllerAdvice和@ExceptionHandler注解
  • 第二種: 使用ErrorController類來實現(xiàn)。

第一種:使用@ControllerAdvice和@ExceptionHandler注解

@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {

  @ResponseBody
  @ExceptionHandler(NullPointerException.class)
  public BaseResult globalException(HttpServletResponse response,NullPointerException ex){


    log.info("GlobalExceptionHandler...");
log.info("錯誤代碼:" + response.getStatus());
BaseResult result = new WebResult(WebResult.RESULT_FAIL,"request error:"+response.getStatus()
                    ,"GlobalExceptionHandler:"+ex.getMessage());
    return result;
}

}

注解@ControllerAdvice表示這是一個控制器增強類,當控制器發(fā)生異常且符合類中定義的攔截異常類,將會被攔截。

可以定義攔截的控制器所在的包路徑

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface ControllerAdvice {
  @AliasFor("basePackages")
  String[] value() default {};

  @AliasFor("value")
  String[] basePackages() default {};

  Class<?>[] basePackageClasses() default {};

  Class<?>[] assignableTypes() default {};

  Class<? extends Annotation>[] annotations() default {};
}

注解ExceptionHandler定義攔截的異常類

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExceptionHandler {
  Class<? extends Throwable>[] value() default {};
}

第二種: 使用ErrorController類來實現(xiàn)。

系統(tǒng)默認的錯誤處理類為BasicErrorController,將會顯示如上的錯誤頁面。

這里編寫一個自己的錯誤處理類,上面默認的處理類將不會起作用。

getErrorPath()返回的路徑服務器將會重定向到該路徑對應的處理類,本例中為error方法。

@Slf4j
@RestController
public class HttpErrorController implements ErrorController {

  private final static String ERROR_PATH = "/error";

  @ResponseBody
  @RequestMapping(path = ERROR_PATH )
  public BaseResult error(HttpServletRequest request, HttpServletResponse response){
    log.info("訪問/error" + " 錯誤代碼:" + response.getStatus());
    BaseResult result = new WebResult(WebResult.RESULT_FAIL,"HttpErrorController error:"+response.getStatus());
return result;
  }
  @Override
  public String getErrorPath() {
    return ERROR_PATH;
  }
}

測試

以上定義了一個統(tǒng)一的返回類BaseResult,方便前端進行處理。

package com.microblog.common.result;

import java.io.Serializable;


public class BaseResult implements Serializable {

  private static final long serialVersionUID = 1L;

  public static final int RESULT_FAIL = 0;
  public static final int RESULT_SUCCESS = 1;

  //返回代碼
  private Integer code;

  //返回消息
  private String message;

  //返回對象
  private Object data;

  public BaseResult(Integer code, String message) {
    this.code = code;
    this.message = message;
  }

  public BaseResult(Integer code, String message, Object object) {
    this.code = code;
    this.message = message;
    this.data = object;
  }


  public Integer getCode() {
    return code;
  }

  public void setCode(Integer code) {
    this.code = code;
  }

  public String getMessage() {
    return message;
  }

  public void setMessage(String message) {
    this.message = message;
  }

  public Object getData() {
    return data;
  }

  public void setData(Object data) {
    this.data = data;
  }
}

編寫一個測試控制器

@Slf4j
@RestController
@RequestMapping("/user")
public class TestController {

  @RequestMapping("/info1")
  public String test(){
   log.info("/user/info1");

   throw new NullPointerException("TestController have exception");

  }
}

1.發(fā)出一個錯誤的請求,也就是沒有對應的處理類。

從返回可以看到是由HttpErrorController類處理

{"code":0,"message":"HttpErrorController error:404","data":null}

2.發(fā)出一個正常的請求(TestController的test()處理),處理類中拋出空異樣

從返回中可以看出是由GlobalExceptionHandler類處理

{"code":0,"message":"request error:200","data":"GlobalExceptionHandler:TestController have exception"}

區(qū)別

1.注解@ControllerAdvice方式只能處理控制器拋出的異常。此時請求已經(jīng)進入控制器中。

2.類ErrorController方式可以處理所有的異常,包括未進入控制器的錯誤,比如404,401等錯誤

3.如果應用中兩者共同存在,則@ControllerAdvice方式處理控制器拋出的異常,類ErrorController方式未進入控制器的異常。

4.@ControllerAdvice方式可以定義多個攔截方法,攔截不同的異常類,并且可以獲取拋出的異常信息,自由度更大。

到此這篇關于SpringBoot處理全局統(tǒng)一異常的實現(xiàn)的文章就介紹到這了,更多相關SpringBoot 全局統(tǒng)一異常內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中的運算符你知道多少

    Java中的運算符你知道多少

    這篇文章主要為大家詳細介紹了Java中的運算符,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Java字符編碼簡介_動力節(jié)點Java學院整理

    Java字符編碼簡介_動力節(jié)點Java學院整理

    這篇文章主要介紹了Java字符編碼簡介,本文主要包括以下幾個方面:編碼基本知識,Java,系統(tǒng)軟件,url,工具軟件等,感興趣的朋友一起看看吧
    2017-08-08
  • 解析Java中的Field類和Method類

    解析Java中的Field類和Method類

    這篇文章主要介紹了Java中的Field類和Method類,是Java入門學習中的基礎知識,需要的朋友可以參考下
    2015-12-12
  • Mybatisplus多表關聯(lián)分頁查詢多種實現(xiàn)方式

    Mybatisplus多表關聯(lián)分頁查詢多種實現(xiàn)方式

    本文主要介紹了Mybatisplus多表關聯(lián)分頁查詢多種實現(xiàn)方式,包括使用XML自定義SQL、Wrapper搭配自定義SQL、使用DTO與自定義SQL及結合PageHelper實現(xiàn)分頁查詢,感興趣的可以了解一下
    2025-03-03
  • Redis框架Jedis及Redisson對比解析

    Redis框架Jedis及Redisson對比解析

    這篇文章主要介紹了Redis框架Jedis及Redisson對比解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot mybatis 實現(xiàn)多級樹形菜單的示例代碼

    SpringBoot mybatis 實現(xiàn)多級樹形菜單的示例代碼

    這篇文章主要介紹了SpringBoot mybatis 實現(xiàn)多級樹形菜單的示例代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • java如何將pdf轉換成image

    java如何將pdf轉換成image

    這篇文章主要為大家詳細介紹了java如何將pdf轉換成image,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • FP-Growth算法的Java實現(xiàn)+具體實現(xiàn)思路+代碼

    FP-Growth算法的Java實現(xiàn)+具體實現(xiàn)思路+代碼

    FP-Growth算法比Apriori算法快很多(但是卻比不上時間,how time slipped away)。在網(wǎng)上搜索后發(fā)現(xiàn)Java實現(xiàn)的FP-Growth算法很少,且大多數(shù)不太能理解):太菜。所以就自己實現(xiàn)了一下。這篇文章重點介紹一下我的Java實現(xiàn)
    2021-06-06
  • Java進程間通信之消息隊列

    Java進程間通信之消息隊列

    這篇文章主要為大家詳細介紹了Java進程間通信之消息隊列,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java有效處理異常的三個原則

    Java有效處理異常的三個原則

    Java中異常提供了一種識別及響應錯誤情況的一致性機制,有效地異常處理能使程序更加健壯、易于調試。那么這篇文章總結了Java有效處理異常的三個原則,有需要的朋友們可以參考借鑒。
    2016-09-09

最新評論

宿迁市| 西畴县| 错那县| 桦南县| 元朗区| 平果县| 沾益县| 金寨县| 灵武市| 和政县| 奉贤区| 古蔺县| 开原市| 乌兰浩特市| 剑河县| 肃南| 福安市| 伊宁市| 南和县| 泗阳县| 长海县| 绵竹市| 涡阳县| 呼伦贝尔市| 无锡市| 武山县| 孟连| 班戈县| 图木舒克市| 河北省| 合作市| 云阳县| 政和县| 阳曲县| 神农架林区| 苍溪县| 屯门区| 依兰县| 应用必备| 安义县| 镇平县|