spring boot中統一異常處理
在前面的部落格中,Spring Boot整合jpa,Shiro進行許可權管理 異常都是直接返回到頁面上,這樣做既不安全,也不友好,所以在返回給頁面之前,我們需要對異常資訊進行統一的處理,該部分的處理思路和spring mvc的處理思路是一致的。
下面,我們來對前面的示例進行改造,從而能夠支援統一的異常處理。
1、定義全域性異常處理類
@ControllerAdvice public class GlobalExceptionHandler {// 此處僅用作測試 @ExceptionHandler(value = Exception.class) public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception { ModelAndView mav = new ModelAndView(); if (e instanceof UnauthorizedException) {// 判斷異常型別 mav.addObject("exception", "無權訪問!");// 根據異常型別,返回具體的展示資訊 } else { mav.addObject("exception", "系統錯誤,請聯絡管理員@chhliu!"); } mav.addObject("url", req.getRequestURL()); mav.setViewName("/error");// 異常資訊展示到哪個頁面,此處指定在error.html頁面中進行展示 return mav; } }
從上面的示例可以得出,我們可以通過@ControllerAdvice來定義統一的異常處理類,使用@ExceptionHandler來決定哪些異常需要處理,當然,我們也可以在程式中針對具體的異常類進行判斷。
2、對映異常處理頁面
預設的情況下,所有的異常資訊都會對映到error頁面,所以,我們需要在templates目錄下新建一個error.html的異常展示頁面,如下:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8" /> <title>統一異常處理</title> </head> <body> <h1>Error Handler, 無許可權訪問</h1> </body> </html>
3、在Controller中丟擲異常
一般情況下,我們的異常處理都是從底層往上層拋,比如Dao層往Service層拋,Service層往Controller層拋,當Controller層還往外層拋的時候,就會被我們的全域性異常處理器捕獲了。
通過上面的幾個步驟,就完成了異常的統一處理了,但是在我們的實際開發中,我們的異常資訊通常是以json格式返回給服務呼叫端的,那怎麼來統一處理返回json格式的字串了?處理起來也很簡單,我們在上面的程式碼中做下修改即可。
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(value = Exception.class) @ResponseBody// 返回json資料 public ErrorInfo<String> jsonErrorHandler(HttpServletRequest req, Exception e) throws Exception { ErrorInfo<String> r = new ErrorInfo<>();// 異常資訊封裝類 r.setMessage(e.getMessage()); r.setCode("403"); r.setData("無權訪問"); r.setUrl(req.getRequestURL().toString()); return r; } }
測試結果如下:
{"code":"403","message":"Subject does not have permission [userInfo:del]","url":"http://172.28.1.1:8080/userInfo/userDel","data":"無權訪問"}
這樣,我們就完成了統一異常的處理了。這樣,既保證了異常資訊不洩露,同時前端的展示也非常友好。
相關推薦
spring boot中統一異常處理
在前面的部落格中,Spring Boot整合jpa,Shiro進行許可權管理 異常都是直接返回到頁面上,這樣做既不安全,也不友好,所以在返回給頁面之前,我們需要對異常資訊進行統一的處理,該部分的處理思路和spring mvc的處理思路是一致的。 下面,我們來對前面的示例進
spring boot 中統一異常處理
map handler this internal col message static pub 處理 基於 spring boot 對異常處理的不友好,現在通過其他的方式來統一處理異常 步驟一:自定義異常類 public class UserNotExistExc
Spring Boot學習——統一異常處理
return 方法 ssa static framework 處理異常 tor ebo except 本隨筆記錄使用Spring Boot統一處理異常。 本文實例是從數據庫中根據ID查詢學生信息,要求學生的年齡在14——20歲之間。小於14歲,提
spring boot 2 統一異常處理
auto cati uil extend 代碼 自定義error view empty framework spring mvc 針對controller層異常統一處理非常簡單,使用 @RestControllerAdvice 或 @RestControllerAdvice
實戰分析:Spring boot &&Freemarker統一異常處理FreeMarker template error
在Freemarker頁面中如果使用${userName}, 並且userName為空,那麼Freemarker頁面就會崩掉 需要設定預設值${userName!}來避免物件為空的錯誤。 同理 ${user.userName}也應該寫成這樣${(user.userN
基於Spring Boot的統一異常處理設計
基於Spring Boot的統一異常處理設計 作者: Grey 原文地址:https://www.cnblogs.com/greyzeng/p/11733327.html Spring Boot中,支援RestControllerAdvice統一處理異常,在一個請求響應週期當中,如果Controller,Se
只需一步,在Spring Boot中統一Restful API返回值格式與統一處理異常
統一返回值 在前後端分離大行其道的今天,有一個統一的返回值格式不僅能使我們的介面看起來更漂亮,而且還可以使前端可以統一處理很多東西
spring 或 springboot統一異常處理
pbo catch ada pass ann href TP let copy spring 或 springboot統一異常處理https://blog.csdn.net/xzmeasy/article/details/76150370 一,本文介紹spring MV
Spring Boot-全局異常處理(八)
set temp ajax tac itl resp produce lec div SpringBoot默認異常默認處理機制 Spring boot錯誤異常時通過BasicErrorController來處理的 通過判斷是瀏覽器請求還是ajax請求響應頁面或者json
Spring Boot中統一日誌解決方案
日誌是整個系統中非常重要的一環,JAVA中也有很多日誌框架,本文實現了在Spring Boot中利用logback和aop統一處理日誌。本文比較簡單,已記錄為主O(∩_∩)O~ 首先在resources目錄下新建logback-spring.xml作為logba
Spring Cloud:統一異常處理
在啟動應用時會發現在控制檯列印的日誌中出現了兩個路徑為 {[/error]} 的訪問地址,當系統中傳送異常錯誤時,Spring Boot 會根據請求方式分別跳轉到以 JSON 格式或以介面顯示的 /error 地址中顯示錯誤資訊。 2018-12-18 09:36:24.627
Spring Boot 2 全域性異常處理
1、建立 MyRestControllerAdvice 類,並新增 @RestControllerAdviceimport com.tm.common.dto.Rjson; import com.tm.common.exception.BusinessException; i
spring boot中全域性異常的定義
全域性異常 import com.alibaba.fastjson.JSON; import com.ziku.msp.common_enum.ErrorCodeEnum; import com.ziku.msp.exception.BizException; import
spring-boot實戰【07】【轉】:Spring Boot中Web應用的統一異常處理
http integer private fin ima lex clas 友好 ref 我們在做Web應用的時候,請求處理過程中發生錯誤是非常常見的情況。Spring Boot提供了一個默認的映射:/error,當處理中拋出異常之後,會轉到該請求中處理,並且該請求有一個全
企業分布式微服務雲SpringCloud SpringBoot mybatis (五)Spring Boot中Web應用的統一異常處理
src one exception learn 微服務 public .net 可能 訪問 我們在做Web應用的時候,請求處理過程中發生錯誤是非常常見的情況。Spring Boot提供了一個默認的映射:/error,當處理中拋出異常之後,會轉到該請求中處理,並且該請求有一個
Spring Boot中Web應用的統一異常處理
通過 提示頁面 ret oot 頁面效果 tro ctype doctype ice 我們在做Web應用的時候,請求處理過程中發生錯誤是非常常見的情況。Spring Boot提供了一個默認的映射:/error,當處理中拋出異常之後,會轉到該請求中處理,並且該請求有一個全
Spring Boot中Web應用的統一異常處理實戰
一 建立全域性異常處理類 package com.didispace.exception; import com.didispace.dto.ErrorInfo; import org.springframework.web.bind.annotation.Contr
springboot全域性異常處理(包含404錯誤處理) 一:解決spring boot中rest介面404,500等錯誤返回統一的json格式(備用地址) 二:SpringBoot入門——區域性與全域性的異常處理(備用地址)
個人整理參考文件: 一:解決spring boot中rest介面404,500等錯誤返回統一的json格式(備用地址) 二:SpringBoot入門——區域性與全域性的異常處理(備用地址) 三:SpringBoot全域性異常處理(備用地址) 四:sprin
Spring Boot? 統一異常處理
xtend import put itl ava advice efault ges spring 效果區: 代碼區: package com.wls.integrateplugs.exception.dto; public class ErrorI
spring boot 1.5.4 統一異常處理(九)
springboot springboot1.5.4 springboot整合springdatajpa springboot集成jdbctemplate springboot異常處理 上一篇:springboot 1.5.4 配置文件詳解(八) 1 Spring Boot統一異