成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Boot 異常處理,值得學習!

開發 后端
最近在搭建屬于自己的個人博客(碼農小白的執念),自己搭建后端的時候首先考慮的是異常處理。

背景:

個人也是一邊學習一邊做,難免有疏漏的地方,希望朋友們在不對的地方提醒下。

技術棧:

  1. springBoot 2.5.3
  2. Mybatis-plus
  3. thymeleaf
  4. mysql

該博客簡單記錄一下自己的學習過程,如果后面作出簡單的demo來,那么會整理其中的細節發布出來。

推薦一個 Spring Boot 基礎教程及實戰示例:

??https://github.com/javastacks/spring-boot-best-practice ??

異常處理

個人粗糙的學習和理解,我把異常錯誤分為三個,4xx,5xx,error(自定義)

常用的是404和500響應

  • 404 (未找到) 服務器找不到請求的網頁
  • 服務器內部錯誤 服務器遇到錯誤,無法完成請求

在templates文件下創建404.html、500.html和error.html

如果創建的是4xx.html和5xx.html,那么當頁面找不到或者程序內部錯誤的話,SpringBoot自動匹配到這兩個頁面,具體的源碼在這里就不分析,感興趣的可以去學習下。

   “

   當我想將錯誤信息返回到我自定義的頁面怎么寫?

   ”

我們自頂向下來思考:

  1. 我們訪問頁面的時候,頁面發生錯誤也好,找不到也好,是不是都要走它請求的Url,那我們怎么處理這個請求呢?
  2. 這時候我們自然而然的想到攔截器,所以編寫ControllerExceptionHandler類,來專門攔截所有的異常請求。
  3. 當我們處理完異常后,把這個流放行,或者返回我們需要的自定義頁面上。

這樣就實現了我們上述的需求。

所需要的技術點:

  1. @ControllerAdvice
  •  配合 @ExceptionHandler注解結合使用,當異常拋到controller層時,可以對異常進行統一的處理,規定返回的json格式或者跳轉到指定的錯誤頁面等.
  1. @ExceptionHandler(Exception.class) // 表示 捕獲 全部異常
  2. ModelAndView 其實就是兩個作用,一個是指定返回頁面,另一個是在返回頁面的同時添加屬性

通過Logger來打印獲取相關的異常信息:

//獲取異常的信息
logger.error(() -> {
return String.format("Request URL : %s,Exception : %s ", request.getRequestURL(),e);
},e);

在這里自己走了一些彎路,小伙子自己走窄了,導包倒錯了??。最新面試題整理好了,大家可以在Java面試庫小程序在線刷題。

這里我導的包是mybatis中的:

import org.mybatis.logging.Logger;
import org.mybatis.logging.LoggerFactory;

傳參一直不對,只能走源碼的路子了,看看自己調用的什么玩意:最后就寫成了上述的代碼格式。

我看其他人寫的代碼的時候才恍然大明白,如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
logger.error("Requst URL : {},Exception : {}", request.getRequestURL(),e);

可能有的朋友感覺沒啥,但是我自己調了半個小時才出來,菜是原罪。

Logger這個只是在控制臺輸出,或者綁定了日志,會輸出到日志中。

接著上述問題通過ModelAndView類實現:

   “

   ModelAndView像極了Model。

   ”

敲黑板:來新需求了!

如果我想從所有的異常中剝離出404異常并返回給SpringBoot讓他自動處理頁面怎么解。最新 Spring Boot 面試題整理好了,大家可以在Java面試庫小程序在線刷題。

按照學習的來說。當頁面為null的時候,向上拋出一個自定義的異常類,該異常類標注了異常狀態。

throw new NotFoundException("博客找不到,請聯系管理員"); //自定義類
@ResponseStatus(HttpStatus.NOT_FOUND)
public class NotFoundException extends RuntimeException{
public NotFoundException() {
super();
}
public NotFoundException(String message) {
super(message);
}
}

然后我們可以在總的異常中通過AnnotationUtils.findAnnotation通過傳入AnnotatedElement和注解類型來查找方法或者類對象上的注解。

如果滿足條件可以拋出異常讓SpringBoot接管。

if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {
throw e;
}


責任編輯:龐桂玉 來源: Java技術棧
相關推薦

2021-04-20 10:50:38

Spring Boot代碼Java

2022-10-26 07:14:25

Spring 6Spring業務

2023-09-24 13:55:42

Spring應用程序

2021-04-30 07:34:01

Spring BootController項目

2025-02-13 00:34:22

Spring對象系統

2023-07-10 08:00:13

架構Rest返回值

2011-05-24 09:22:44

Spring3異常處理

2023-09-13 08:56:51

2020-03-16 17:20:02

異常處理Spring Boot

2024-08-02 09:15:22

Spring捕捉格式

2020-06-08 09:15:14

前端 開發 Git

2025-02-07 09:11:04

JSON對象策略

2022-04-27 08:55:01

Spring外部化配置

2011-01-21 11:12:01

Spring

2023-12-11 14:19:00

Java程序異常

2025-01-08 10:35:26

代碼開發者Spring

2013-08-22 17:10:09

.Net異常處理

2012-12-21 10:48:20

Java異常

2017-05-18 14:14:25

過濾器Spring ClouZuul

2017-05-19 15:13:05

過濾器Spring ClouZuul
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天操操 | 91在线精品秘密一区二区 | 国产精品久久九九 | 一二区成人影院电影网 | 久久91精品国产一区二区三区 | 久久精品视频免费看 | 中文字幕日韩三级 | 久久久www成人免费精品张筱雨 | 亚洲午夜在线 | 国产无人区一区二区三区 | 亚洲一区二区精品视频 | 成人在线观 | 欧美另类视频 | 国产传媒视频在线观看 | 久热精品在线观看视频 | www.婷婷亚洲基地 | 91精品国产综合久久久动漫日韩 | 国产片淫级awww | 国产精品久久久久久影视 | 久久久久九九九九 | 成人在线亚洲 | 久久久久久亚洲精品 | 日本久久一区二区三区 | 日本一道本视频 | 日本精品视频一区二区 | 国产第一亚洲 | 欧美久久一区二区三区 | av资源中文在线天堂 | 久久亚洲一区二区三区四区 | 国产日批 | 国产精品一区二区久久久久 | 超碰人人插 | 欧美黄色片 | 国产综合欧美 | 亚洲一区二区高清 | 国产片网站 | 一级大黄色片 | 国产日韩欧美在线观看 | 国产精品亚洲第一 | 亚洲毛片在线观看 | a精品视频|