一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Springboot異常錯誤處理解決方案詳解

Springboot異常錯誤處理解決方案詳解

2020-09-01 00:36白熊啊 Java教程

這篇文章主要介紹了Springboot異常錯誤處理解決方案詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

1.在有模板引擎的情況下:

springboot會默認找 templates/error/錯誤狀態碼.html,所以我們要定制化錯誤頁面就可以到templates/error下創建一個【對應錯誤狀態碼.html】html文件,當發生此狀態碼的錯誤springboot就會來到對應的頁面。

同時如果我們想讓400-499之間的錯誤都去同一個錯誤頁面,那我們可以在templates/error下創建一個4xx.html。同理500-599的錯誤可以用5xx.html。

Springboot異常錯誤處理解決方案詳解

注意:springboot會優先匹配具體的【錯誤狀態碼.html】,然后再匹配4xx,5xx的。例如:發生了404錯誤,springboot優先到templates/error下找404.html,如果沒有404.html,再找有沒有4xx.html,有的話就會使用4xx.html。

在錯誤頁面我們能夠獲取到的信息:

  • timestamp:時間戳
  • status:狀態碼
  • error:錯誤提示
  • exception:異常對象 springboot2.1.6在頁面獲取異常對象要現在全局配置文件中加入:server.error.include-exception=true
  • message:異常消息
  • errors:JSR數據校驗的錯誤

2.在沒有模板引擎(模板引擎找不到這個錯誤頁面)的情況下,springboot會到靜態資源文件夾下的error包下找。

3.以上都沒有找到錯誤頁面,就默認用springboot默認的錯誤提示頁面

錯誤異常處理——自定義響應json數據

上邊的錯誤處理中,如果是瀏覽器訪問可以響應我們自己定制的錯誤頁面,但是如果是其他客戶端訪問,則只會響應固定的json數據,如下圖所示:

Springboot異常錯誤處理解決方案詳解

下邊講解三個異常處理返回自定義json數據的方式

首先編寫一個自定義異常類

public class UserNotExitException extends RuntimeException {
  public UserNotExitException() {
    super("用戶不存在");
  }
}

方式一:

在異常處理器類中,通過map封裝我們自己的json數據,然后將map返回。

@ControllerAdvice
public class MyExceptionHandler {

  @ResponseBody
  @ExceptionHandler(UserNotExitException.class)
  public Map<String,Object> userNotExitExceptionHandler(Exception e){
    Map<String,Object> map = new HashMap<>();
    map.put("code","user.notexit");
    map.put("message",e.getMessage());
    return map;
  }
}

  @ControllerAdvice:表明這是一個全局異常處理類

  @ExceptionHandler(UserNotExitException.class):表明標注的此方法用于處理UserNotExitException異常。

  @ResponseBody:將返回結果封裝為json

3.結果

  不管瀏覽器還是其他客戶端發生該異常都統一得到下圖的響應

      Springboot異常錯誤處理解決方案詳解

方式二:轉發到/error,進行自適應響應效果處理

@ControllerAdvice
public class MyExceptionHandler {
  @ExceptionHandler(UserNotExitException.class)
  public String userNotExitExceptionHandler(Exception e, HttpServletRequest request){
    Map<String,Object> map = new HashMap<>();
    request.setAttribute("javax.servlet.error.status_code",500);
    map.put("code","user.notexit");
    map.put("message","用戶出錯了");
    return "forward:/error";
  }
}

將響應轉發到 /error,讓springboot幫我們生成自適應效果。但是必須注意,一定要設置錯誤狀態碼(如代碼中標黃色的那一句代碼)。不設置的話springboot就不會進入定制錯誤頁面的解析流程。設置了之后springboot就會到templates/error/錯誤狀態碼.html頁面處理。

注意:此方式瀏覽器訪問發生錯誤不再響應的是json數據了,而是對于的錯誤響應網頁。

Springboot異常錯誤處理解決方案詳解

其他客戶端訪問響應的是json數據,但是響應的json數據中沒有我們map中put的數據。

Springboot異常錯誤處理解決方案詳解

方式三:通過DefaultErrorAttribute

1.在異常處理器類中將響應的json數據封裝到map中,然后再將map放到請求域中

@ControllerAdvice
public class MyExceptionHandler {
  @ExceptionHandler(UserNotExitException.class)
  public String userNotExitExceptionHandler(Exception e, HttpServletRequest request){
    Map<String,Object> map = new HashMap<>();
    request.setAttribute("javax.servlet.error.status_code",500);
    map.put("code","user.notexit");
    map.put("message","用戶出錯了");
    request.setAttribute("ext",map);
    return "forward:/error";
  }
}

2.編寫錯誤屬性類:新建一個類繼承DefaultErrorAttribute類,并重寫其中的getErrorAttributes方法

@Component
public class MyErrorAttributes extends DefaultErrorAttributes {
  @Override
  public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
    Map<String, Object> map = super.getErrorAttributes(webRequest, includeStackTrace);
    map.put("company","atguigu");
    Map<String, Object> ext = (Map<String, Object>) webRequest.getAttribute("ext", 0);
    map.put("ext",ext);
    return map;
  }
}

注意:

(1).必須將錯誤屬性類添加到spring容器中。

(2).第7行標黃那段代碼的作用是獲取異常處理類中的map。其中最后的參數0,是從request域中取出數據“ext”。若要從session域中取數據,則將該參數設置為1.(0是從request域獲取數據,1是從session域中獲取數據)

(3).錯誤屬性類中返回的map中的所有內容,頁面都可以獲取到。

總結:

  此方式最好,當瀏覽器訪問發生錯誤時,會響應對應的錯誤響應頁面,當其他客戶端訪問發生錯誤時也會響應我們定制的json數據。

瀏覽器響應:

Springboot異常錯誤處理解決方案詳解

其他客戶端響應:

Springboot異常錯誤處理解決方案詳解

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/bear7/p/13501638.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本中年japanesebear | 我和岳偷长篇小说 | 日韩一区视频在线 | 日韩理论片在线看免费观看 | 妹妹骑上来蹭着蹭着就射了 | 嗯啊视频在线 | 污网站免费观看在线高清 | 亚洲 欧美 国产 综合首页 | 天天性综合| 亚洲国产日韩成人综合天堂 | 国产精品中文字幕 | 日本成熟bbxxxxxxxx | 日韩免费毛片视频杨思敏 | 亚洲成人三级 | 大奶喷水| 日韩三及片 | 日本不卡在线一区二区三区视频 | 91麻豆国产福利在线观看 | 东方影视欧美天天影院 | 91在线精品国产丝袜超清 | 亚洲日本中文字幕天堂网 | 日韩欧美在线观看综合网另类 | 欧美三级不卡在线观线看高清 | 亚洲女人国产香蕉久久精品 | 色多多视频在线 | 羞羞一区二区三区四区片 | 亚欧毛片基地国产毛片基地 | 3黑人巨大vs北岛玲 3d肉浦团在线观看 3d动漫免费 | 岛国在线播放v片免费 | 精品免费久久久久久成人影院 | 情乱奶水欲 | 久久99国产视频 | 我的家教老师 | 国产在线视频欧美亚综合 | 果冻传媒mv在线观看入口免费 | 99午夜高清在线视频在观看 | 视频一区国产精戏刘婷30 | 国产亚洲综合久久 | 四虎成人4hutv影院 | 国产高清在线看 | 99福利影院 |