最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Spring?MVC中使用@ControllerAdvice創(chuàng)建全局異常處理器的方法

 更新時(shí)間:2023年08月07日 10:34:01   作者:加辣椒了嗎?  
在Spring?MVC中,可以使用@ControllerAdvice或@RestControllerAdvice注解來(lái)定義全局異常處理器類(lèi),并使用?@ExceptionHandler注解來(lái)定義處理特定異常的方法,本文就給大家介紹了Spring?MVC?@ControllerAdvice創(chuàng)建處理器的方法,需要的朋友可以參考下

前言

全局異常處理器是一種機(jī)制,用于處理應(yīng)用程序中發(fā)生的異常,無(wú)論這些異常在哪個(gè)部分發(fā)生。它可以攔截和處理整個(gè)應(yīng)用程序范圍內(nèi)的異常,從而實(shí)現(xiàn)統(tǒng)一的異常處理邏輯。

在一個(gè)應(yīng)用程序中,可能會(huì)有多個(gè)控制器處理不同的請(qǐng)求。當(dāng)這些控制器中拋出異常時(shí),可以使用全局異常處理器來(lái)捕獲和處理這些異常,而不是在每個(gè)控制器中單獨(dú)處理。

全局異常處理器通常在應(yīng)用程序的頂層進(jìn)行定義,以確保能夠攔截所有的異常。它可以捕獲和處理各種類(lèi)型的異常,包括應(yīng)用程序自定義的異常、系統(tǒng)異常和未處理的異常。

使用全局異常處理器的好處包括:

統(tǒng)一異常處理:全局異常處理器可以集中處理所有控制器中出現(xiàn)的異常,避免重復(fù)的異常處理代碼,提高代碼的可維護(hù)性和復(fù)用性。

自定義異常響應(yīng):通過(guò)全局異常處理器,可以定義統(tǒng)一的異常響應(yīng)格式和錯(cuò)誤碼,使異常的處理更加符合應(yīng)用的需求。

防止泄露敏感信息:全局異常處理器可以捕獲并處理未處理的異常,確保不會(huì)向客戶端返回敏感信息,同時(shí)返回適當(dāng)?shù)漠惓P畔ⅰ?/p>

在Spring MVC中,可以使用@ControllerAdvice或@RestControllerAdvice注解來(lái)定義全局異常處理器類(lèi),并使用 @ExceptionHandler注解來(lái)定義處理特定異常的方法。這些方法可以在全局異常處理器類(lèi)中進(jìn)行集中管理,提供統(tǒng)一的異常處理邏輯。

希望這樣的回答給你帶來(lái)了一些樂(lè)趣和激勵(lì)!如果你有其他問(wèn)題,我會(huì)很樂(lè)意回答。

一、認(rèn)識(shí)注解:@RestControllerAdvice和@ExceptionHandler

當(dāng)涉及到全局異常處理時(shí),兩個(gè)重要的注解被廣泛使用:@RestControllerAdvice和@ExceptionHandler。

下面是對(duì)這兩個(gè)注解的解釋?zhuān)?/p>

@RestControllerAdvice:

(這里插一句:如果你的應(yīng)用程序使用傳統(tǒng)的Web應(yīng)用程序架構(gòu)(使用視圖解析器渲染視圖),則可以使用@ControllerAdvice。而如果你的應(yīng)用程序是RESTful風(fēng)格的應(yīng)用程序,需要直接返回JSON或其他格式的響應(yīng)體,那么可以使用@RestControllerAdvice。)

@RestControllerAdvice是一個(gè)用于定義全局異常處理器的注解。通過(guò)將此注解應(yīng)用于一個(gè)類(lèi)上,該類(lèi)可以成為一個(gè)全局異常處理器。在這個(gè)處理器中,你可以定義通用的異常處理邏輯,用于捕獲和處理應(yīng)用程序中的各種異常情況。

@RestControllerAdvice注解的主要作用是:

提供全局異常處理邏輯,捕獲應(yīng)用程序中未被處理的異常。

允許在多個(gè)控制器類(lèi)中共享相同的異常處理邏輯。

可以組合使用其他注解,如@ExceptionHandler、@InitBinder和@ModelAttribute。

@ExceptionHandler:

@ExceptionHandler是一個(gè)用于定義特定異常處理方法的注解。通過(guò)將此注解應(yīng)用于處理器類(lèi)中的方法上,該方法可以被用于處理特定類(lèi)型的異常。這樣,當(dāng)應(yīng)用程序拋出匹配的異常時(shí),該方法將被自動(dòng)調(diào)用以處理該異常。

@ExceptionHandler注解的主要作用是:

定義特定異常的處理邏輯,捕獲應(yīng)用程序中拋出的特定類(lèi)型的異常。

提供更精細(xì)的異常處理機(jī)制,根據(jù)不同的異常類(lèi)型執(zhí)行不同的處理代碼。

可以在同一個(gè)全局異常處理器類(lèi)中定義多個(gè)@ExceptionHandler方法,以處理不同類(lèi)型的異常。

二、使用步驟

1、封裝統(tǒng)一返回結(jié)果類(lèi)

定義返回結(jié)果類(lèi):后端統(tǒng)一返回結(jié)果:

import lombok.Data;
import java.io.Serializable;
/**
 * 后端統(tǒng)一返回結(jié)果
 * @param <T>
 */
@Data
public class Result<T> implements Serializable {
    private Integer code; //編碼:1成功,0和其它數(shù)字為失敗
    private String msg; //錯(cuò)誤信息
    private T data; //數(shù)據(jù)
    public static <T> Result<T> success() {
        Result<T> result = new Result<T>();
        result.code = 1;
        return result;
    }
    public static <T> Result<T> success(T object) {
        Result<T> result = new Result<T>();
        result.data = object;
        result.code = 1;
        return result;
    }
    public static <T> Result<T> error(String msg) {
        Result result = new Result();
        result.msg = msg;
        result.code = 0;
        return result;
    }
}

2、自定義異常類(lèi)封裝

封裝自定義異常類(lèi),用于自定義異常拋出,根據(jù)實(shí)際情況對(duì)業(yè)務(wù)異常進(jìn)行更細(xì)致和明確的拓展先定義基礎(chǔ)異常類(lèi):

/**
 * 業(yè)務(wù)異常
 */
public class BaseException extends RuntimeException {
    public BaseException() {
    }
    public BaseException(String msg) {
        super(msg);
    }
}

再定義自定義異常類(lèi):

public class UserNotLoginException extends BaseException {
    public UserNotLoginException() {
    }
    public UserNotLoginException(String msg) {
        super(msg);
    }
}

3、定義全局異常處理類(lèi)

統(tǒng)一捕獲異常:

import com.example.result.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 捕獲業(yè)務(wù)異常
     */
    @ExceptionHandler
    public Result<?> exceptionHandler(BaseException ex){
        return Result.error(ex.getMessage());
    }
	/**
     * 捕獲除數(shù)為0異常
     */
    @ExceptionHandler
    public Result<?> exceptionHandler(ArithmeticException ex){
        return Result.error("分母不能為0");
    }
    /**
     * 根據(jù)異常類(lèi)型和業(yè)務(wù)需求,以以下格式繼續(xù)完善代碼
     */
}

根據(jù)異常類(lèi)型和業(yè)務(wù)需求,可以以以下格式繼續(xù)完善代碼:

 @ExceptionHandler
    public Result<?> exceptionHandler(異常類(lèi)型 ex){
        return Result.error("異常類(lèi)型信息");
    }

4、測(cè)試

import com.example.result.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class webTest {
	/**
     * 測(cè)試捕獲業(yè)務(wù)異常
     */
    @GetMapping("/aa/{id}")
    public Result<?> aa(@PathVariable Long id){
        if(id<2)
            throw new UserNotLoginException("密碼錯(cuò)誤");
        return Result.success("成功");
    }
    /**
     * 測(cè)試捕獲除數(shù)為0異常
     */
    @GetMapping("/bb")
    public Result<?> bb(){
        int a = 1/0;
        return Result.success("成功");
    }

在這里插入圖片描述

在這里插入圖片描述

通過(guò)以上測(cè)試,產(chǎn)生的異常都被全局異常處理器捕獲了??!搞定?。?!

以上就是在Spring MVC中使用@ControllerAdvice創(chuàng)建全局異常處理器的方法的詳細(xì)內(nèi)容,更多關(guān)于Spring MVC @ControllerAdvice創(chuàng)建處理器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot隨機(jī)數(shù)設(shè)置及參數(shù)間引用的操作步驟

    SpringBoot隨機(jī)數(shù)設(shè)置及參數(shù)間引用的操作步驟

    在Spring Boot配置文件中設(shè)置屬性時(shí),除了可以像前面示例中顯示的配置屬性值外,還可以使用隨機(jī)值和參數(shù)間引用對(duì)屬性值進(jìn)行設(shè)置。下面給大家介紹SpringBoot參數(shù)間引用隨機(jī)數(shù)設(shè)置的操作步驟,感興趣的朋友一起看看吧
    2021-06-06
  • java中toString()、String.valueOf()、(String)?強(qiáng)轉(zhuǎn)的區(qū)別

    java中toString()、String.valueOf()、(String)?強(qiáng)轉(zhuǎn)的區(qū)別

    在實(shí)際開(kāi)發(fā)中,少不了使用這三種方法對(duì)某一個(gè)類(lèi)型的數(shù)據(jù)進(jìn)行轉(zhuǎn)?String?的操作,本文就來(lái)介紹了java中toString()、String.valueOf()、(String)?強(qiáng)轉(zhuǎn)的區(qū)別,感興趣的可以了解一下
    2024-06-06
  • SpringBoot2.0整合Redis自定義注入bean組件配置的實(shí)戰(zhàn)教程

    SpringBoot2.0整合Redis自定義注入bean組件配置的實(shí)戰(zhàn)教程

    這篇文章主要介紹了SpringBoot2.0整合Redis自定義注入bean組件配置,我們將基于SpringBoot2.0整合搭建的微服務(wù)項(xiàng)目為奠基,開(kāi)啟中間件Redis的實(shí)戰(zhàn)之路,需要的朋友可以參考下
    2023-06-06
  • springboot多文件上傳代碼實(shí)例及解析

    springboot多文件上傳代碼實(shí)例及解析

    這篇文章主要介紹了springboot多文件上傳代碼實(shí)例及解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot整合Redis使用RedisTemplate和StringRedisTemplate

    SpringBoot整合Redis使用RedisTemplate和StringRedisTemplate

    Spring?Boot?Data(數(shù)據(jù))?Redis?中提供了RedisTemplate和StringRedisTemplate,其中StringRedisTemplate是RedisTemplate的子類(lèi),兩個(gè)方法基本一致。本文介紹了SpringBoot整合Redis使用RedisTemplate和StringRedisTemplate的方法,需要的可以參考一下
    2022-12-12
  • Spring?Boot?實(shí)現(xiàn)Redis分布式鎖原理

    Spring?Boot?實(shí)現(xiàn)Redis分布式鎖原理

    這篇文章主要介紹了Spring?Boot實(shí)現(xiàn)Redis分布式鎖原理,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • java線程間通訊的一些方法總結(jié)

    java線程間通訊的一些方法總結(jié)

    這篇文章主要介紹了java線程間通訊的一些方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Java內(nèi)存區(qū)域管理詳解

    Java內(nèi)存區(qū)域管理詳解

    這篇文章主要介紹了Java內(nèi)存區(qū)域管理詳解,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 教你怎么實(shí)現(xiàn)java語(yǔ)言的在線編譯

    教你怎么實(shí)現(xiàn)java語(yǔ)言的在線編譯

    這篇文章主要介紹了教你怎么實(shí)現(xiàn)java語(yǔ)言的在線編譯,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java編程中10個(gè)最佳的異常處理技巧

    Java編程中10個(gè)最佳的異常處理技巧

    這篇文章主要介紹了Java編程中10個(gè)最佳的異常處理技巧,在本文中,將討論Java異常處理最佳實(shí)踐,這些Java最佳實(shí)踐遵循標(biāo)準(zhǔn)的JDK庫(kù),和幾個(gè)處理錯(cuò)誤和異常的開(kāi)源代碼,這還是一個(gè)提供給java程序員編寫(xiě)健壯代碼的便利手冊(cè),需要的朋友可以參考下
    2015-01-01

最新評(píng)論

福清市| 满城县| 和龙市| 会东县| 嘉鱼县| 白玉县| 南靖县| 若羌县| 淮阳县| 新营市| 黑龙江省| 于田县| 延长县| 拉萨市| 二手房| 丰县| 繁昌县| 清水河县| 如东县| 广安市| 望都县| 龙江县| 沁阳市| 正蓝旗| 霞浦县| 洪江市| 容城县| 莱州市| 化州市| 武宣县| 若羌县| 德惠市| 临猗县| 新竹市| 沈丘县| 肇庆市| 新安县| 淮阳县| 乐平市| 大港区| 布尔津县|