首先我們先在控制器中寫一個(gè)異常,默認(rèn)情況下我們的SpringBoot異常頁(yè)面是這個(gè)樣子的。
示例代碼如下:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author qinxun
* @date 2023-06-15
* @Descripion: 測(cè)試
*/
@RestController
public class IndexController {
@GetMapping("/index")
public String toIndex() {
// 500狀態(tài)碼
int i = 1 / 0;
return "index";
}
}
?一、自定義靜態(tài)異常頁(yè)面
自定義靜態(tài)異常頁(yè)面,我們可以分成兩種方式,第一種就是使用HTTP狀態(tài)碼來(lái)命名頁(yè)面,例如404.html,403.html,500html等。另一種就是直接定義一個(gè)4xx.html,表示400-499狀態(tài)碼的頁(yè)面,5xx.html表示狀態(tài)碼500-599的異常頁(yè)面。
我們?cè)赾lasspath:/static/error/路徑下定義相關(guān)異常頁(yè)面
?4xx.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>Http狀態(tài)碼400-499的異常頁(yè)面</div>
</body>
</html>
5xx.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>Http狀態(tài)碼500-599的異常頁(yè)面</div>
</body>
</html>
啟動(dòng)項(xiàng)目,如果項(xiàng)目拋出HTTP狀態(tài)碼500的錯(cuò)誤,就會(huì)自動(dòng)顯示5xx.html這個(gè)頁(yè)面,反之拋出狀態(tài)碼400的錯(cuò)誤,就會(huì)顯示4xx.html這個(gè)頁(yè)面。
?二、自定義動(dòng)態(tài)異常頁(yè)面
?4xx.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>4xx</h1>
<table border="1">
<tr>
<td>path</td>
<td>error</td>
<td>message</td>
<td>status</td>
</tr>
<tr>
<td th:text="${path}"></td>
<td th:text="${error}"></td>
<td th:text="${message}"></td>
<td th:text="${status}"></td>
</tr>
</table>
</body>
</html>
5xx.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>5xx</h1>
<table border="1">
<tr>
<td>path</td>
<td>error</td>
<td>message</td>
<td>status</td>
</tr>
<tr>
<td th:text="${path}"></td>
<td th:text="${error}"></td>
<td th:text="${message}"></td>
<td th:text="${status}"></td>
</tr>
</table>
</body>
</html>
如果動(dòng)態(tài)異常頁(yè)面和靜態(tài)異常頁(yè)面同時(shí)存在,默認(rèn)使用動(dòng)態(tài)頁(yè)面,完整的錯(cuò)誤頁(yè)面查找方式應(yīng)該是:
發(fā)生500錯(cuò)誤->查找動(dòng)態(tài)500.html頁(yè)面->查找靜態(tài)500.html頁(yè)面->查找動(dòng)態(tài)5xx.html頁(yè)面->查找靜態(tài)5xx.html頁(yè)面
頁(yè)面上使用的path、error、message、status默認(rèn)為SpringBoot的異常機(jī)制返回的。
我們重新訪問接口:
?我們可以創(chuàng)建一個(gè)自定義類實(shí)現(xiàn)異常數(shù)據(jù)返回處理。
示例代碼如下:
import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.WebRequest;
import java.util.Map;
/**
* @author qinxun
* @date 2023-06-16
* @Descripion: 自定義異常數(shù)據(jù)返回
*/
@Component
public class MyErrorAttributes extends DefaultErrorAttributes {
@Override
public Map<String, Object> getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {
Map<String, Object> map = super.getErrorAttributes(webRequest, options);
if ((Integer) map.get("status") == 500) {
map.put("message", "服務(wù)器內(nèi)部錯(cuò)誤!");
}
return map;
}
}
啟動(dòng)項(xiàng)目,我們重新訪問接口:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-490467.html
?異常頁(yè)面顯示了我們自定義的異常數(shù)據(jù)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-490467.html
到了這里,關(guān)于SpringBoot全局異常頁(yè)面處理學(xué)習(xí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!