SpringBoot 2 快速整合 | 統一異常處理
統一異常處理相關注解介紹
@ControllerAdvice
宣告在類上用於指定該類為控制增強器類,如果想宣告返回的結果為 RESTFull 風格的資料,需要在宣告 @ExceptionHandler 註解的方法上同時加 上 @ResponseBody
@RestControllerAdvice
宣告在類上用於指定該類為控制增強器類。並宣告返回的結果為 RESTFull 風格的資料,無需在宣告 @ExceptionHandler 註解的方法上加
@ResponseBody
@ExceptionHandler
宣告在方法上用於指定需要統一攔截的異常。例如:@ExceptionHandler(value = Exception.class)
實戰操作
定義訊息類:
定義 RESTFull 返回 JSON 資料的訊息類,其中包含成員變數如下:
- code:錯誤碼,0表示沒有異常資訊。
- message:異常提示資訊。
- date:無異常是返回具體內容資訊。
public class ReturnMessage<T> { private Integer code;//錯誤碼 private String message;//提示資訊 private T date;//返回具體內容 public ReturnMessage(Integer code, String message, T date) { super(); this.code = code; this.message = message; this.date = date; } //省略get and set方法 }
** 訊息類處理工具類:**
主要是用來處理成功或失敗訊息處理,該工具類主要包含是3個方法 :
- 成功處理含實體資料
- 成功處理 沒有實體資料
- 失敗處理
具體程式碼如下:
public class ReturnMessageUtil { /** * 無異常 請求成功並有具體內容返回 * @param object * @return */ public static ReturnMessage<Object> sucess(Object object) { ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",object); return message; } /** * 無異常 請求成功並無具體內容返回 * @return */ public static ReturnMessage<Object> sucess() { ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",null); return message; } /** * 有自定義錯誤異常資訊 * @param code * @param msg * @return */ public static ReturnMessage<Object> error(Integer code,String msg) { ReturnMessage<Object> message = new ReturnMessage<Object>(code,msg,null); return message; } }
自定義異常類:
我們通過自定義系統異常類來完成校驗相關的操作,自定義系統異常類通過繼承 RuntimeException ,然後宣告名稱為 code 的成員變數來表示不同型別異常。
主要是用於異常攔截後獲取自定義異常的 code ,並將code 設定到訊息類中。
public class SbException extends RuntimeException{
private Integer code;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public SbException(Integer code,String message) {
super(message);
this.code = code;
}
}
定義統一異常攔截類:
通過宣告 @RestControllerAdvice 表示該類為 RESTFul 風格的異常處理控制增強器類,在 handle 方法宣告 @ExceptionHandler 並在該註解中指定要攔截的異常類。具體程式碼如下:
@RestControllerAdvice
public class ExceptionHandle {
private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);
@ExceptionHandler(value = Exception.class)
public ReturnMessage<Object> handle(Exception exception) {
if(exception instanceof SbException) {
SbException sbexception = (SbException)exception;
return ReturnMessageUtil.error(sbexception.getCode(), sbexception.getMessage());
}else {
logger.error("系統異常 {}",exception);
return ReturnMessageUtil.error(-1, "未知異常"+exception.getMessage());
}
}
}
測試
分別測試自定義異常和系統異常,通過 /error/custome 測試自定義異常,通過 /error/unknown 測試未知的系統異常。具體程式碼如下:
@RestController
@RequestMapping("/error")
public class DemoException {
@GetMapping(value = "custome")
public void customException() {
SbException sbe = new SbException(100, "這個是自定義異常!");
throw sbe;
}
@GetMapping(value = "unknown")
public void unknownException() {
int i = 0;
int b = 1/i;
}
}
測試結果:
相關推薦
SpringBoot 2 快速整合 | 統一異常處理
統一異常處理相關注解介紹 @ControllerAdvice 宣告在類上用於指定該類為控制增強器類,如果想宣告返回的結果為 RESTFull 風格的資料,需要在宣告 @ExceptionHandler 註解的方法上同時加 上 @ResponseBody @RestControllerAdvice 宣告在類上用
SpringBoot初始教程之統一異常處理(三)
SpringBoot初始教程之統一異常處理(三) 1.介紹 在日常開發中發生了異常,往往是需要通過一個統一的異常處理處理所有異常,來保證客戶端能夠收到友好的提示。SpringBoot在頁面 發生異常的時候會自動把請求轉到/error,SpringBoot內建了一個BasicErr
SpringBoot進階之統一異常處理(含原始碼)
淺談異常處理 在J2EE專案的開發中,不管是對底層的資料庫操作過程,還是業務層的處理過程,還是控制層的處理過程,都不可避免會遇到各種可預知的、不可預知的異常需要處理。每個過程都單獨處理異常,系統的程式碼耦合度高,工作量大且不好統一,維護的工作量也很大。
玩轉 SpringBoot 2 快速整合 | Thymeleaf 篇
前言 Thymeleaf是一個適用於Web和獨立環境的現代伺服器端Java模板引擎。 Thymeleaf的主要目標是為您的開發工作
springboot 統一異常處理
sping nbsp 用法 異常處理 exc png 不能 run ges 在sping框架裏定義我們想要的異常類,不能繼承Exception,要繼承RuntimeException,原因在於spring框架只對拋出的異常是RuntimeException,才會進行事務回滾
企業分布式微服務雲SpringCloud SpringBoot mybatis (五)Spring Boot中Web應用的統一異常處理
src one exception learn 微服務 public .net 可能 訪問 我們在做Web應用的時候,請求處理過程中發生錯誤是非常常見的情況。Spring Boot提供了一個默認的映射:/error,當處理中拋出異常之後,會轉到該請求中處理,並且該請求有一個
springboot統一異常處理
ddl ice 運行 ppi stc 之間 事務回滾 提示 throws 對於與數據庫相關的 Spring MVC 項目,我們通常會把 事務 配置在 Service層,當數據庫操作失敗時讓 Service 層拋出運行時異常,Spring 事物管理器就會進行回滾。 如此一來,
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 2 統一異常處理
auto cati uil extend 代碼 自定義error view empty framework spring mvc 針對controller層異常統一處理非常簡單,使用 @RestControllerAdvice 或 @RestControllerAdvice
Java框架-SpringMVC統一異常處理、ssm框架整合
1. SpringMVC中異常處理 1.1 各層處理異常原則即實現方法 1.1.1 各層處理異常原則 dao:不處理,拋異常; service:不處理,拋異常; controller/servlet:必須處理,否則錯誤資訊將直接在瀏覽器顯示給使用者看。 1.1.2 異
SpringBoot統一異常處理及統一回復介面
SpringBoot及Mybait壞境搭建詳見上一篇 一.定義回覆介面格式類 package com.example.demo.bean; /* * * Created by Ay on 2018/9/20 */ //返回的格式類 public class ResultBean&l
《SpringBoot從入門到放棄》之第(五)篇——統一異常處理
在平時的開發測試過程中,經常能看到下面的錯誤頁面,該頁面是SpringBoot提供的預設error對映頁面,該頁面如果直接傳遞給使用者,那將非常的不友好,因此,我們通常需要去實現自定義的異常提示。 建立全域性異常處理類:通過使用@ControllerAdvice定義統一的異常處理類,而不是在
SpringBoot進階之web進階3~統一異常處理
規定返回結果Result類 我們為了解決邏輯在一個地方處理,另一個地方不需要再接收它返回的資訊,所以我們引入了異常。預設的Exception只接受message的欄位,但我們通常還有code, 所以自定義一個Exception如下:
第六篇:SpringBoot統一異常處理
一、什麼是異常處理 異常(Exception)是程式在執行時可能出現的會導致程式執行終止的錯誤。這種錯誤是不能通過編譯系統檢查出來的,如果不進行異常處理,程式將中斷無法提供服務。 二、如何使用Spring Boot異常處理 案例: 獲取某個女生的年齡並判斷小於10,返
SpringBoot表單驗證、AOP處理請求和統一異常處理
表單驗證 假如表單引數很多,用@RequestParam方式就不合適了,引數中可直接使用@Valid Girl gir /** * 新增一個女生 * @return */ @PostMapping(value = "/a
springboot-表單驗證|AOP|統一異常處理
@PostMapping(value = "/girls") public Object addGirl(Girl girl) {//此處不用使用多個@RequestParam("name") Result result = new Re
Springboot統一異常處理並儲存到資料庫
一.統一異常處理之前我們平時在專案中遇到異常,用try-catch這種標準的捕獲方式處理就可以解決問題,但是在每個介面中都這麼寫,這種重複造輪子的事情對於我們程式設計師當然是不太願意的。然而我們可以在springboot專案中利用@ControllerAdvice 這個註解可
Springboot(10)輕鬆搞定統一異常處理
原始碼地址 異常的捕獲方式 方式一 HandlerExceptionResolver介面 實現該介面,註冊到spring容器中,當controller中產生異常的時候會呼叫該介面來處理,注意,當返回值指定檢視時會自動跳轉至指定的檢視中去,如果返回null
springboot統一異常處理方法
@ControllerAdvice註解將作用在所有註解了@RequestMapping的控制器的方法上 @ExceptionHandler:用於全域性處理控制器裡的異常 所以在寫專案的時候都service層和mapper層都使用拋異常的方式,把異常都拋到controller層,然後來統一處理.這
【SpringBoot】Http請求統一異常(返回資料)處理與單元測試
對返回資料格式的統一 首先規定一下錯誤的輸出格式: { "code": 1, "msg": "提示", "data": null } data是一個物件 首先定義一個http請求返回的類 package cn.