SpringBoot 統一異常處理(十六)
每個異常都自己去處理很麻煩,所以我們建立一個全域性異常處理類來統一處理異常
一,首先建立全域性異常處理類:通過使用@ControllerAdvice定義統一的異常處理類,而不是在每個Controller中逐個定義。@ExceptionHandler用來定義函式針對的異常型別,@RestControllerAdvice統一回復ExceptionResponse物件,並轉為為json格式
通用異常返回物件
package com.alen.user.common; import com.alibaba.fastjson.JSONObject; import org.springframework.http.HttpStatus; import java.util.Calendar; /** * 異常資訊返回體 */ public class ExceptionResponse { private Long timestamp; private Integer status; private String message; public ExceptionResponse(HttpStatus statusEnum, String message) { this.timestamp = Calendar.getInstance().getTimeInMillis(); this.status = statusEnum.value(); this.message = message; } public Long getTimestamp() { return timestamp; } public void setTimestamp(Long timestamp) { this.timestamp = timestamp; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } @Override public String toString() { return JSONObject.toJSONString(this); } }
自定義業務異常
package com.alen.user.exception;
/**
* 自定義業務異常
*/
public class BusinessException extends RuntimeException{
public BusinessException(String s)
{
super(s);
}
}
全域性異常處理類
package com.alen.user.handler; import com.alen.user.common.ExceptionResponse; import com.alen.user.exception.BusinessException; import com.alen.user.exception.SystemException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * Controller全域性異常處理 * Created by jianchen on 2017/8/11. */ @RestControllerAdvice public class GlobalExceptionHandler { private final static Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); /** * 錯誤碼說明 * HTTP 400 - 請求無效 * HTTP 401 - 未授權:登入失敗 (401錯誤全部跳轉至登入頁面) * HTTP 403 - 沒有許可權:沒有許可權 (提示資訊) * HTTP 404 - (未找到)伺服器找不到請求的介面 * HTTP 406 - 引數錯誤 * HTTP 417 - 業務處理異常(自定義錯誤資訊) * HTTP 500 - 未定義異常(伺服器異常) * 其它 未知異常 */ /** * 自定義業務異常 * @param e * @param httpServletRequest * @param httpServletResponse * @return * @throws IOException */ @ExceptionHandler(BusinessException.class) public ExceptionResponse businessExceptionHandler(BusinessException e, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { String uri = httpServletRequest.getRequestURI(); logger.error("當前訪問uri: [{}], 自定義業務異常:[{}]", uri, e); httpServletResponse.setStatus(HttpStatus.EXPECTATION_FAILED.value()); ExceptionResponse exceptionResponse = new ExceptionResponse(HttpStatus.EXPECTATION_FAILED, e.getMessage()); return exceptionResponse; } /** * 系統異常 * * @param e * @param httpServletRequest * @param httpServletResponse * @return * @throws SystemException */ @ExceptionHandler(SystemException.class) public ExceptionResponse systemExceptionHandler(SystemException e, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { String uri = httpServletRequest.getRequestURI(); logger.error("當前訪問uri: [{}], 系統異常(自定義異常):[{}]", uri, e); httpServletResponse.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); ExceptionResponse exceptionResponse = new ExceptionResponse(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage()); return exceptionResponse; } /** * IOException * @param e * @param httpServletRequest * @param httpServletResponse * @return */ @ExceptionHandler(IOException.class) public ExceptionResponse IOExceptionHandler(IOException e, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { String uri = httpServletRequest.getRequestURI(); logger.error("當前訪問uri: [{}], io異常:[{}], 異常資訊:[{}]", uri, e.getClass(), e); httpServletResponse.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); ExceptionResponse exceptionResponse = new ExceptionResponse(HttpStatus.INTERNAL_SERVER_ERROR, "檔案傳輸異常"); return exceptionResponse; } @ExceptionHandler(RuntimeException.class) public ExceptionResponse runtimeExceptionHandler(RuntimeException e, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { String uri = httpServletRequest.getRequestURI(); logger.error("當前訪問uri: [{}], 執行時異常:[{}], 異常資訊:[{}]", uri, e.getClass(), e); httpServletResponse.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); ExceptionResponse exceptionResponse = new ExceptionResponse(HttpStatus.INTERNAL_SERVER_ERROR, "系統異常"); return exceptionResponse; } @ExceptionHandler(Exception.class) public ExceptionResponse exceptionHandler(Exception e, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { String uri = httpServletRequest.getRequestURI(); logger.error("當前訪問uri: [{}], 異常型別:[{}], 異常資訊:[{}]", uri, e.getClass(), e); httpServletResponse.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); ExceptionResponse exceptionResponse = new ExceptionResponse(HttpStatus.INTERNAL_SERVER_ERROR, "系統異常"); return exceptionResponse; } }
相關推薦
SpringBoot 統一異常處理(十六)
每個異常都自己去處理很麻煩,所以我們建立一個全域性異常處理類來統一處理異常 一,首先建立全域性異常處理類:通過使用@ControllerAdvice定義統一的異常處理類,而不是在每個Controller中逐個定義。@ExceptionHandler用來定義函式針對的異常型別
SpringBoot進階之統一異常處理(含原始碼)
淺談異常處理 在J2EE專案的開發中,不管是對底層的資料庫操作過程,還是業務層的處理過程,還是控制層的處理過程,都不可避免會遇到各種可預知的、不可預知的異常需要處理。每個過程都單獨處理異常,系統的程式碼耦合度高,工作量大且不好統一,維護的工作量也很大。
Python+OpenCV圖像處理(十六)—— 輪廓發現
draw 一個 設置 在外 ace align list tco 灰度 簡介:輪廓發現是基於圖像邊緣提取的基礎尋找對象輪廓的方法,所以邊緣提取的閾值選定會影響最終輪廓發現結果。 代碼如下: import cv2 as cv import numpy as np def c
C#-異常處理(十四)
範圍 eth 行程 value ole pub 捕獲 顯示轉換 clas 概念 異常處理是指程序在運行過程中,發生錯誤會導致程序退出,這種錯誤,就叫做異常 但並不是所有的錯誤都是異常 而處理這種錯誤,稱為異常處理 異常處理實際是不斷去發掘異常、修改異常,使程序更穩定
SpringBoot入門系列篇(十六):actuator監控模組入門
actuator是SpringBoot提供的一個用於監控的模組,想要在SpringBoot中使用則需要引入該jar包: <dependency> <groupId>org.springframework.boot</gro
學習springBoot 進階統一異常處理(六)
在實際開發當中我們經常會遇到BUG,所以都會封裝一個異常返回類來使用,提示我們到底是那一步出了問題,方便於我們追蹤問題並且解決問題, 以下舉個新增女孩物件為例子,當新增的女孩物件年齡小於10歲時我們提示該女孩在上小學,大於10歲且小於16歲提示可能在上初中,通過例子說明我們如何對異常統一處理並返
企業分布式微服務雲SpringCloud SpringBoot mybatis (十六)Spring Boot中使用LDAP來統一管理用戶信息
數據庫表 repo on() intellij attr ads get 可選 mail LDAP簡介 LDAP(輕量級目錄訪問協議,Lightweight Directory Access Protocol)是實現提供被稱為目錄服務的信息服務。目錄服務是一種特殊的數據庫系
Netty in Action (十六) 第六章節 第二部分 ChannelHandlerContext和異常處理
6.3 Interface ChannelHandlerContext 一個ChannelHandlerContext代表了一個ChannelHandler和ChannelPipeline之間的關係,ChannelHandlerContext創建於ChannelHandl
企業分散式微服務雲SpringCloud SpringBoot mybatis (十六)Spring Boot中使用LDAP來統一管理使用者資訊
LDAP簡介LDAP(輕量級目錄訪問協議,Lightweight Directory Access Protocol)是實現提供被稱為目錄服務的資訊服務。目錄服務是一種特殊的資料庫系統,其專門針對讀取,瀏覽和搜尋操作進行了特定的優化。目錄一般用來包含描述性的,基於屬性的資訊並
spring boot 1.5.4 統一異常處理(九)
springboot springboot1.5.4 springboot整合springdatajpa springboot集成jdbctemplate springboot異常處理 上一篇:springboot 1.5.4 配置文件詳解(八) 1 Spring Boot統一異
R語言學習筆記(十六):處理缺失值
ima 結果 cti img dataset case prop .com log #識別缺失值 install.packages("VIM") data(sleep,package="VIM") #列出沒有缺失值的行 sleep[complete.case
ng機器學習視頻筆記(十六) ——從圖像處理談機器學習項目流程
公眾號 written 字符串分割 評估 jpg 關註 改進 視頻 pip ng機器學習視頻筆記(十六) ——從圖像處理談機器學習項目流程 (轉載請附上本文鏈接——linhxx) 一、概述 這裏簡單討論圖像處理的機器學習過程,主要討論的是機器學習的
Python資料處理之(十 六)Pandas 合併merce
要點 pandas中的merge和concat類似,但主要是用於兩組有key column的資料,統一索引的資料. 通常也被用在Database的處理當中. 依據一組key合併 import pandas as pd #定義資料集並打印出 left = pd.DataFrame({
第六篇:SpringBoot統一異常處理
一、什麼是異常處理 異常(Exception)是程式在執行時可能出現的會導致程式執行終止的錯誤。這種錯誤是不能通過編譯系統檢查出來的,如果不進行異常處理,程式將中斷無法提供服務。 二、如何使用Spring Boot異常處理 案例: 獲取某個女生的年齡並判斷小於10,返
一起來學SpringBoot(十六)優雅的整合Shiro
Apache Shiro是一個功能強大且易於使用的Java安全框架,可執行身份驗證,授權,加密和會話管理。藉助Shiro易於理解的API,您可以快速輕鬆地保護任何應用程式 - 從最小的移動應用程式到最大的Web和企業應用程式。網上找到大部分文章都是以前Sprin
spring深入學習(十六) IOC 之parentBeanFactory 與依賴處理
繼上篇部落格 【死磕 Spring】—– 載入 bean 之 快取中獲取單例 bean,如果從單例快取中沒有獲取到單例 bean,則說明兩種情況: 該 bean 的 scope 不是 singleton 該 bean 的 scope 是 singleton ,但是沒有初始化
SpringBoot學習-(十六)SpringBoot釋出到獨立的tomcat中執行
儘管Spring Boot專案會內建一個tomcat,僅只需通過一個簡單的指令便可啟動專案,但在生產環境下,我們還是習慣將專案釋出到第三外的servlet容器中,下面將介紹如果將一個Spring Boot專案部署到第三方tomcat中執行。 1)修改工程的
Android OpenGLES2.0(十六)——3D模型貼圖及光照處理(obj+mtl)
在Android OpenGLES2.0(十四)——Obj格式3D模型載入中實現了Obj格式的3D模型的載入,載入的是一個沒有貼圖,沒有光照處理的帽子,為了呈現出立體效果,“手動”加了光照,擁有貼圖的紋理及光照又該怎麼載入呢? 模型檔案 本篇部落格例子中
springboot乾貨——(十六)使用@Async實現非同步呼叫
非同步呼叫針對的是同步呼叫,一般在程式碼中我們使用同步呼叫相對較多,即請求程式碼立即返回結果或者說執行程式碼,非同步呼叫則是指請求之後不會裡面返回結果或者是呼叫程式碼。 接下來我們用例項來看下什麼是同步呼叫: 新建一個springboot專案後建立對應的task類: pa
java springboot b2b2c shop 多使用者商城系統原始碼 (十六)用restTemplate消費服務
構架工程 建立一個springboot工程,去消費RESTFUL的服務。這個服務是 http:///gturnquist-quoters.cfapps.io/api/random ,它會隨機返回Json字串。 在Spring專案中,它提供了一個非常簡便的類,叫RestTempl