關注我,一個仍存夢想的屌絲程序員,每天爲你分享高質量編程博客。
回覆 “代金券” 免費獲取騰訊雲和阿里雲代金券
1、如何定製錯誤的頁面;
(1.1)有模板引擎的情況下
將錯誤頁面命名爲錯誤狀態碼.html
放在模板引擎文件夾裏面的error
文件夾下,當程序發生此狀態碼的錯誤就會來到對應的錯誤頁面;
我們可以使用4xx和5xx作爲錯誤頁面的文件名來匹配這種類型的所有錯誤,精確優先(優先尋找狀態碼.html,其次是4xx或5xx.html);
錯誤頁面能獲取的信息:
timestamp:時間戳
status:狀態碼
error:錯誤提示
exception:異常對象
message:異常消息
errors:JSR303數據校驗的錯誤都在這裏
<h1>status:[[${status}]]</h1>
<p>error:[[${error}]]</p>
<p>exception:[[${exception}]]</p>
<p>message:[[${message}]]</p>
<p>errors:[[${errors}]]</p>
<p>timestamp:[[${#dates.format(timestamp,'yyyy-MM-dd HH:mm:ss')}]]</p>
(1.2)沒有模板引擎(模板引擎找不到這個錯誤頁面)
靜態資源文件夾下找相關的錯誤頁面
SpringBoot會在默認的靜態資源文件路徑下找錯誤頁面,但這個頁面不能動態獲取錯誤信息
(1.3)以上都沒有錯誤頁面
就是默認來到SpringBoot默認的錯誤提示頁面
2、如何定製錯誤的json數據
無論瀏覽器還是Postman等其他訪問方式都會返回json格式的錯誤信息
/**
* 異常處理器
*/
@ControllerAdvice
public class MyExceptionHandler {
@ExceptionHandler(RuntimeException.class)
@ResponseBody
public Map<String,Object> handleException(Exception e/*傳入異常的信息*/){
Map<String,Object> map = new HashMap<>();
map.put("code",1);
map.put("message",e.getMessage());
return map;
}
}
瀏覽器進入定製的錯誤頁面,Postman照常返回json格式
@ExceptionHandler(MyException.class)
public String handleException(Exception e/*傳入異常的信息*/, HttpServletRequest request){
Map<String,Object> map = new HashMap<>();
System.out.println(e);
// 傳入自己的狀態碼
request.setAttribute("javax.servlet.error.status_code",404);
map.put("code",1);
map.put("message",e.getMessage());
return "forward:/error";
}
主要操作是:傳入自己的狀態碼request.setAttribute("javax.servlet.error.status_code",4xx);
,如果沒有這行代碼,瀏覽器訪問異常會自動跳到SpringBoot默認的錯誤頁面
定製數據加入到json裏返回給客戶端,並且瀏覽器響應爲指定錯誤頁面
@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","myErrorHandler"); // 可以給json返回值添加自己的字段和值
// 將異常處理器的異常值保存在request裏,然後在這裏取出來保存起來
Map<String, Object> resultMap = (Map<String, Object>) webRequest.getAttribute("result",0);
map.put("result",resultMap);
return map;
}
}
/*--(分割線)---------------異常處理器MyExceptionHandler--------------*/
@ExceptionHandler(MyException.class)
public String handleException(Exception e/*傳入異常的信息*/, HttpServletRequest request){
Map<String,Object> map = new HashMap<>();
System.out.println(e);
// 傳入自己的狀態碼
// request.setAttribute("javax.servlet.error.status_code",404);
map.put("code",1);
map.put("message",e.getMessage());
// 保存到request裏
request.setAttribute("result",map);
return "forward:/error";
}
頁面上能用的數據,或者是json返回能用的數據都是通過errorAttributes.getErrorAttributes得到;,容器中默認使用DefaultErrorAttributes.getErrorAttributes()方法進行數據處理的;
返回結果
回覆 ” spring boot “ 獲取 spring boot 相關文章
回覆關鍵字:
1、回覆 “10” 查看 最有價值的10個spring boot開源項目
2、回覆 “國旗” 獲取國旗頭像教程
3、回覆 “Ubuntu” 獲取100 個最佳 Ubuntu 應用 和 linux神器
4、回覆 “ idea ” 獲取**最新idea破解教程 和 裝逼神奇
5、回覆 “ ssh ” 獲取史上最好的 ssh工具 支持mac
6、回覆 “ 代金券 ” 騰訊雲和阿里雲代金券
7、回覆 “免費” 可以獲取免費的java面試資源和學習視頻
推薦閱讀:
oauth2 認證服務器 資源服務器分離 使用Redis存儲Token
Java 開發人員常用的服務配置(Nginx、Tomcat、JVM、Mysql、Redis)
面試官問我:一個 TCP 連接可以發多少個 HTTP 請求?我竟然回答不上來…
免責聲明:
1.本公衆號所轉載文章均來自公開網絡。
2.如果出處標註有誤或侵犯到原著作者權益,請聯繫刪除。
3.轉載本公衆號中的文章請註明原文鏈接和作者,否則產生的任何版權糾紛均與本公衆號無關。