1. 程式人生 > >spring boot中統一異常處理

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 BootWeb應用的統一異常處理

http integer private fin ima lex clas 友好 ref 我們在做Web應用的時候,請求處理過程中發生錯誤是非常常見的情況。Spring Boot提供了一個默認的映射:/error,當處理中拋出異常之後,會轉到該請求中處理,並且該請求有一個全

企業分布式微服務雲SpringCloud SpringBoot mybatis (五)Spring BootWeb應用的統一異常處理

src one exception learn 微服務 public .net 可能 訪問 我們在做Web應用的時候,請求處理過程中發生錯誤是非常常見的情況。Spring Boot提供了一個默認的映射:/error,當處理中拋出異常之後,會轉到該請求中處理,並且該請求有一個

Spring BootWeb應用的統一異常處理

通過 提示頁面 ret oot 頁面效果 tro ctype doctype ice   我們在做Web應用的時候,請求處理過程中發生錯誤是非常常見的情況。Spring Boot提供了一個默認的映射:/error,當處理中拋出異常之後,會轉到該請求中處理,並且該請求有一個全

Spring BootWeb應用的統一異常處理實戰

 一 建立全域性異常處理類 package com.didispace.exception; import com.didispace.dto.ErrorInfo; import org.springframework.web.bind.annotation.Contr

springboot全域性異常處理(包含404錯誤處理) 一:解決spring bootrest介面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統一異