1. 程式人生 > >SpringBoot 2 快速整合 | 統一異常處理

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個方法 :

  1. 成功處理含實體資料
  2. 成功處理 沒有實體資料
  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.