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

Spring Boot 異常處理,值得學(xué)習(xí)!

開(kāi)發(fā) 后端
最近在搭建屬于自己的個(gè)人博客(碼農(nóng)小白的執(zhí)念),自己搭建后端的時(shí)候首先考慮的是異常處理。

背景:

個(gè)人也是一邊學(xué)習(xí)一邊做,難免有疏漏的地方,希望朋友們?cè)诓粚?duì)的地方提醒下。

技術(shù)棧:

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

該博客簡(jiǎn)單記錄一下自己的學(xué)習(xí)過(guò)程,如果后面作出簡(jiǎn)單的demo來(lái),那么會(huì)整理其中的細(xì)節(jié)發(fā)布出來(lái)。

推薦一個(gè) Spring Boot 基礎(chǔ)教程及實(shí)戰(zhàn)示例:

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

異常處理

個(gè)人粗糙的學(xué)習(xí)和理解,我把異常錯(cuò)誤分為三個(gè),4xx,5xx,error(自定義)

常用的是404和500響應(yīng)

  • 404 (未找到) 服務(wù)器找不到請(qǐng)求的網(wǎng)頁(yè)
  • 服務(wù)器內(nèi)部錯(cuò)誤 服務(wù)器遇到錯(cuò)誤,無(wú)法完成請(qǐng)求

在templates文件下創(chuàng)建404.html、500.html和error.html

如果創(chuàng)建的是4xx.html和5xx.html,那么當(dāng)頁(yè)面找不到或者程序內(nèi)部錯(cuò)誤的話(huà),SpringBoot自動(dòng)匹配到這兩個(gè)頁(yè)面,具體的源碼在這里就不分析,感興趣的可以去學(xué)習(xí)下。

   “

   當(dāng)我想將錯(cuò)誤信息返回到我自定義的頁(yè)面怎么寫(xiě)?

   ”

我們自頂向下來(lái)思考:

  1. 我們?cè)L問(wèn)頁(yè)面的時(shí)候,頁(yè)面發(fā)生錯(cuò)誤也好,找不到也好,是不是都要走它請(qǐng)求的Url,那我們?cè)趺刺幚磉@個(gè)請(qǐng)求呢?
  2. 這時(shí)候我們自然而然的想到攔截器,所以編寫(xiě)ControllerExceptionHandler類(lèi),來(lái)專(zhuān)門(mén)攔截所有的異常請(qǐng)求。
  3. 當(dāng)我們處理完異常后,把這個(gè)流放行,或者返回我們需要的自定義頁(yè)面上。

這樣就實(shí)現(xiàn)了我們上述的需求。

所需要的技術(shù)點(diǎn):

  1. @ControllerAdvice
  •  配合 @ExceptionHandler注解結(jié)合使用,當(dāng)異常拋到controller層時(shí),可以對(duì)異常進(jìn)行統(tǒng)一的處理,規(guī)定返回的json格式或者跳轉(zhuǎn)到指定的錯(cuò)誤頁(yè)面等.
  1. @ExceptionHandler(Exception.class) // 表示 捕獲 全部異常
  2. ModelAndView 其實(shí)就是兩個(gè)作用,一個(gè)是指定返回頁(yè)面,另一個(gè)是在返回頁(yè)面的同時(shí)添加屬性

通過(guò)Logger來(lái)打印獲取相關(guān)的異常信息:

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

在這里自己走了一些彎路,小伙子自己走窄了,導(dǎo)包倒錯(cuò)了??。最新面試題整理好了,大家可以在Java面試庫(kù)小程序在線(xiàn)刷題。

這里我導(dǎo)的包是mybatis中的:

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

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

我看其他人寫(xiě)的代碼的時(shí)候才恍然大明白,如下:

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

可能有的朋友感覺(jué)沒(méi)啥,但是我自己調(diào)了半個(gè)小時(shí)才出來(lái),菜是原罪。

Logger這個(gè)只是在控制臺(tái)輸出,或者綁定了日志,會(huì)輸出到日志中。

接著上述問(wèn)題通過(guò)ModelAndView類(lèi)實(shí)現(xiàn):

   “

   ModelAndView像極了Model。

   ”

敲黑板:來(lái)新需求了!

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

按照學(xué)習(xí)的來(lái)說(shuō)。當(dāng)頁(yè)面為null的時(shí)候,向上拋出一個(gè)自定義的異常類(lèi),該異常類(lèi)標(biāo)注了異常狀態(tài)。

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

然后我們可以在總的異常中通過(guò)AnnotationUtils.findAnnotation通過(guò)傳入AnnotatedElement和注解類(lèi)型來(lái)查找方法或者類(lèi)對(duì)象上的注解。

如果滿(mǎn)足條件可以?huà)伋霎惓W孲pringBoot接管。

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


責(zé)任編輯:龐桂玉 來(lái)源: Java技術(shù)棧
相關(guān)推薦

2021-04-20 10:50:38

Spring Boot代碼Java

2022-10-26 07:14:25

Spring 6Spring業(yè)務(wù)

2023-09-24 13:55:42

Spring應(yīng)用程序

2021-04-30 07:34:01

Spring BootController項(xiàng)目

2025-02-13 00:34:22

Spring對(duì)象系統(tǒng)

2023-07-10 08:00:13

架構(gòu)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

前端 開(kāi)發(fā) Git

2025-02-07 09:11:04

JSON對(duì)象策略

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

代碼開(kāi)發(fā)者Spring

2013-08-22 17:10:09

.Net異常處理

2012-12-21 10:48:20

Java異常

2023-09-19 22:41:30

控制器HTTP

2017-05-18 14:14:25

過(guò)濾器Spring ClouZuul
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美一区视频在线 | 九九热精品视频 | 久久国产婷婷国产香蕉 | 91精品国产91久久久久久最新 | 精品国产一区二区久久 | 国产 欧美 日韩 一区 | 国产成人一区二区三区精 | 真人女人一级毛片免费播放 | 欧美成年网站 | 九九热精品视频 | 国产精品视频一区二区三区不卡 | 国产一区二区在线播放 | 久热精品在线 | 极品粉嫩国产48尤物在线播放 | 精品国产伦一区二区三区观看方式 | julia中文字幕久久一区二区 | 91视频免费观看 | 日本一区二区三区免费观看 | 国产一区视频在线 | 久久免费精品视频 | 日韩欧美在线观看 | 91av视频在线观看 | 天堂一区二区三区 | 香蕉视频在线播放 | 久久亚洲一区二区三区四区 | 91九色视频 | 亚洲一区自拍 | 精品久久影院 | 亚洲视频免费播放 | 久久高清 | 亚洲精品久久久久久久久久久久久 | 亚洲精品久久视频 | 91精品国产色综合久久 | 黄色小视频入口 | 日韩精品一区二区三区中文在线 | 国产91精品久久久久久久网曝门 | 久久最新网址 | 亚洲综合免费 | 久久国产精品99久久久久 | 天天爽网站 | 日韩一级免费看 |