1. 程式人生 > >15、SpringBoot-CRUD錯誤處理機制(2)

15、SpringBoot-CRUD錯誤處理機制(2)

.com lwp ssr mss ifs tsd arc hbm vmx

二、如何定制錯誤響應

1).如何定義錯誤處理頁面

1.1、有模板引擎的情況下;error/狀態碼; 【將錯誤頁面命名為 錯誤狀態碼.html 放在模板引擎文件夾裏面的error文件夾下】 發生此狀態碼的錯誤就會來到 對應的頁面;

   技術分享圖片

可以使用4xx、5xx作為錯誤頁面的文件名來匹配這種類型的所有錯誤 精確優先(優先尋找精確的狀態碼.html);

頁面能獲取的信息( DefaultErrorAttributes) timestamp:時間戳 status:狀態碼 error:錯誤提示 exception:異常對象 message:異常消息 errors:JSR303數據校驗的錯誤都在這裏

   技術分享圖片

   技術分享圖片

   技術分享圖片

  

   1.2、沒有模板引擎(模板引擎找不到這個錯誤頁面),靜態資源文件下找    1.3、默認以上兩中都沒有的時候,默認來到springboot的默認頁面

  

2)、定制json數據

設置user異常

public class UserException extends RuntimeException {
    public UserException() {
        super("the user is not exist!");
    }
}

異常頁面:

<h1>status:[[${status}]]</h1>
<h1>timestamp:[[${timestamp}]]</h1>
<h1>error:[[${error}]]</h1>
<h1>message:[[${message}]]</h1>

如果此時瀏覽器訪問報錯:

技術分享圖片

其他客戶端的訪問:

技術分享圖片

2.1、自定義異常處理返回json數據 沒有自適應效果
@ControllerAdvice
public class MyException  {
    @ResponseBody
    @ExceptionHandler(UserException.class)
    public Map<Object,String> userExc(Exception e){
        Map<Object,String> map = new HashMap<>();
        map.put(
"code","user.not.exist"); map.put("message",e.getMessage()); return map; } }

其他客戶端的訪問:

技術分享圖片

瀏覽器的訪問:

技術分享圖片

2.2、轉發到/error進行自適應響應效果處理
@ExceptionHandler(UserException.class)
public String userExc(Exception e){
    Map<Object,String> map = new HashMap<>();
    map.put("code","user.not.exist");
    map.put("message",e.getMessage());
    return "forward:/error";
}

其他客戶端:

技術分享圖片

瀏覽器:(此時是系統默認的處理頁面)

技術分享圖片

在對代碼進行改動

@ExceptionHandler(UserException.class)
public String userExc(Exception e, HttpServletRequest request){
    Map<Object,String> map = new HashMap<>();

    //傳入我們自己的錯誤狀態碼  4xx  5xx
    //否則就不會進入定制錯誤頁面的解析流程
    /**
     * Integer statusCode = (Integer) request
     .getAttribute("javax.servlet.error.status_code");
     */
    request.setAttribute("javax.servlet.error.status_code",400);

    //此時的數據是無法攜帶出去的
    map.put("code","user.not.exist");
    map.put("message",e.getMessage());
    return "forward:/error";
}
瀏覽器:(此時是自定義的錯誤頁面) 技術分享圖片技術分享圖片 其他: 技術分享圖片技術分享圖片

15、SpringBoot-CRUD錯誤處理機制(2)