一钮蛛、友好的頁面
編寫一個錯誤的方法
FastJsonController 類中新增昂拂,
@RequestMapping("/testerror")
@ResponseBody
public User testError() {
User user = new User();
user.setId(2);
user.setUsername("jack2");
user.setPassword("jack246");
user.setBirthday(new Date());
// 模擬異常
int i = 1/0;
return user;
}
訪問 http://127.0.0.1:8081/fastjson/testerror受神,頁面顯示
當(dāng)系統(tǒng)報錯時,返回到頁面的內(nèi)容通常是一些報錯的代碼段格侯,這種顯示對用戶來說不友好鼻听,因此我們需要自定義一個友好的提示系統(tǒng)異常的頁面财著。
在 src/main/resources 下創(chuàng)建 /public/error,在該目錄下再創(chuàng)建一個名為 5xx.html 文件撑碴,該頁面的內(nèi)容就是當(dāng)系統(tǒng)報錯時返回給用戶瀏覽的內(nèi)容撑教。
例如,我們新建一個500.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>訪問異常 - 500</title>
</head>
<body>
<div class="">
<h2>友善的報錯信息 500</h2>
</div>
</body>
</html>
路徑時固定的醉拓,Spring Boot 會在系統(tǒng)報錯時將返回視圖指向該目錄下的文件伟姐。
二、全局異常捕獲
如果項目前后端是通過 JSON 進(jìn)行數(shù)據(jù)通信亿卤,則當(dāng)出現(xiàn)異常時可以常用如下方式處理異常信息愤兵。
編寫一個類充當(dāng)全局異常的處理類,需要使用 @ControllerAdvice 和 @ExceptionHandler 注解排吴。
其中秆乳,方法名為任意名,入?yún)⒁话闶褂?Exception 異常類傍念,方法返回值可自定義矫夷。
package com.springboot.springboot_web.base;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
@ControllerAdvice
public class GlobalDefaultExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public Map<String,Object> defaultExceptionHandler(Exception e) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("code", 500);
map.put("msg", e.getMessage());
return map;
}
}
訪問 http://127.0.0.1:8081/fastjson/testerror,頁面返回
{ "msg":"/ by zero", "code":500 }
我們可以看到憋槐,如果同時做了友好的頁面和全局異常捕獲,會優(yōu)先顯示全局異常捕獲的內(nèi)容淑趾。