国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot 如何使用 @ControllerAdvice 注解進行全局異常處理

這篇具有很好參考價值的文章主要介紹了SpringBoot 如何使用 @ControllerAdvice 注解進行全局異常處理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

SpringBoot 如何使用 @ControllerAdvice 注解進行全局異常處理

在 Web 開發(fā)中,異常處理是非常重要的一環(huán)。在 SpringBoot 框架中,我們通常使用 @ExceptionHandler 注解來處理 Controller 層的異常。但是,如果想要處理全局異常,我們需要使用 @ControllerAdvice 注解。本文將介紹如何在 SpringBoot 中使用 @ControllerAdvice 注解進行全局異常處理。

SpringBoot 如何使用 @ControllerAdvice 注解進行全局異常處理

什么是 @ControllerAdvice

@ControllerAdvice 注解是 Spring Framework 3.2 引入的一個新特性,它用于定義全局異常處理器。使用 @ControllerAdvice 注解,我們可以集中處理所有 Controller 層拋出的異常,而不必在每個 Controller 中單獨處理。

@ControllerAdvice 注解通常與 @ExceptionHandler 注解一起使用,@ExceptionHandler 注解用于定義具體的異常處理方法,@ControllerAdvice 注解用于定義全局異常處理器。

如何使用 @ControllerAdvice 進行全局異常處理

使用 @ControllerAdvice 進行全局異常處理的步驟如下:

  1. 創(chuàng)建一個全局異常處理類

我們可以創(chuàng)建一個類并使用 @ControllerAdvice 注解進行標注,例如:

@ControllerAdvice
public class GlobalExceptionHandler {
    // 異常處理方法
}

在上述代碼中,我們使用 @ControllerAdvice 注解標注了一個類,并命名為 GlobalExceptionHandler。接下來,我們可以在 GlobalExceptionHandler 類中定義具體的異常處理方法。

  1. 定義異常處理方法

在 GlobalExceptionHandler 類中定義具體的異常處理方法,例如:

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
    }
}

在上述代碼中,我們使用 @ExceptionHandler 注解定義了一個處理 Exception 類型異常的方法,并返回一個 ResponseEntity 對象。在處理方法中,我們可以根據(jù)具體的業(yè)務(wù)需求對異常進行相應(yīng)的處理,并返回相應(yīng)的結(jié)果。

  1. 處理其他類型的異常

除了處理 Exception 類型的異常外,我們還可以根據(jù)具體的業(yè)務(wù)需求,處理其他類型的異常。例如,如果我們想要處理參數(shù)校驗失敗的異常,可以在 GlobalExceptionHandler 類中定義一個處理 MethodArgumentNotValidException 類型異常的方法。

@ControllerAdvice
public class GlobalExceptionHandler {
    // 處理 Exception 類型異常的方法

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<String> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        BindingResult bindingResult = e.getBindingResult();
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        List<String> errorMessages = new ArrayList<>();
        for (ObjectError error : allErrors) {
            errorMessages.add(error.getDefaultMessage());
        }
        String errorMessage = String.join(",", errorMessages);
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorMessage);
    }
}

在上述代碼中,我們使用 @ExceptionHandler 注解定義了一個處理 MethodArgumentNotValidException 類型異常的方法。在處理方法中,我們首先獲取 BindingResult 對象,并遍歷其中的所有錯誤信息,將它們合并為一個錯誤消息,并返回一個 ResponseEntity 對象。

完整代碼示例

下面是一個完整的使用 @ControllerAdvice 進行全局異常處理的示例代碼:

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
    }

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<String> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        BindingResult bindingResult = e.getBindingResult();
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        List<String> errorMessages = new ArrayList<>();
        for (ObjectError error : allErrors) {
            errorMessages.add(error.getDefaultMessage());
        }
        String errorMessage = String.join(",", errorMessages);
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorMessage);
    }
}

@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/add")
    public Result addUser(@Validated @RequestBody User user) {
        // 處理添加用戶的邏輯
    }
}

@Data
public class User {
    @NotNull(message = "用戶名不能為空")
    private String username;

    @NotNull(message = "密碼不能為空")
    @Size(min = 6, message ="密碼長度不能小于6")
    private String password;
}

在上述代碼中,我們定義了一個 GlobalExceptionHandler 類,使用 @ControllerAdvice 注解標注,并在其中定義了處理 Exception 和 MethodArgumentNotValidException 類型異常的方法。

我們還定義了一個 UserController 類,并在其中定義了一個添加用戶的接口。在添加用戶接口中,我們使用 @Validated 注解對 User 對象進行參數(shù)校驗,并在 User 類中使用了 javax.validation.constraints 包中的注解對 username 和 password 屬性進行了校驗。如果參數(shù)校驗失敗,會觸發(fā) MethodArgumentNotValidException 異常,在 GlobalExceptionHandler 類中的 handleMethodArgumentNotValidException 方法中進行處理。

總結(jié)

在本文中,我們介紹了如何在 SpringBoot 中使用 @ControllerAdvice 注解進行全局異常處理。通過使用 @ControllerAdvice 注解,我們可以集中處理所有 Controller 層拋出的異常,而不必在每個 Controller 中單獨處理。在 GlobalExceptionHandler 類中定義異常處理方法,并根據(jù)具體的業(yè)務(wù)需求對異常進行相應(yīng)的處理,可以大大提高代碼的可維護性和可讀性。文章來源地址http://www.zghlxwxcb.cn/news/detail-498319.html

到了這里,關(guān)于SpringBoot 如何使用 @ControllerAdvice 注解進行全局異常處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • @ControllerAdvice注解使用及原理探究 | 京東物流技術(shù)團隊

    @ControllerAdvice注解使用及原理探究 | 京東物流技術(shù)團隊

    最近在新項目的開發(fā)過程中,遇到了個問題,需要將一些異常的業(yè)務(wù)流程返回給前端,需要提供給前端不同的響應(yīng)碼,前端再在次基礎(chǔ)上做提示語言的國際化適配。這些異常流程涉及業(yè)務(wù)層和控制層的各個地方,如果每個地方都寫一些重復代碼顯得很冗余。 然后查詢解決方案

    2024年02月14日
    瀏覽(22)
  • springboot使用@Valid 和 @Validated 注解校驗詳解以及編寫一個自定義全局異常類

    springboot使用@Valid 和 @Validated 注解校驗詳解以及編寫一個自定義全局異常類

    全局異常處理類 驗證: ============================================== 導入所需要的包: 如果你是 springboot 項目,那么可以不用引入了,已經(jīng)引入了,他就存在于最核心的 web 開發(fā)包里面。 如果你不是 springboot 項目,那么引入下面依賴即可: 新建三個實體類 實現(xiàn)一: 使用@Valid注解修

    2024年02月10日
    瀏覽(30)
  • SpringBoot中@ControllerAdvice的三種使用場景

    SpringBoot中@ControllerAdvice的三種使用場景

    一、全局異常處理 代碼示例如下: 全局異常處理類: 二、全局數(shù)據(jù)綁定 全局數(shù)據(jù)綁定可以用來做一些初始化數(shù)據(jù)的操作,我們可以將一些公共的數(shù)據(jù)定義到添加了@ControllerAdvice注解的類中,這樣我們就可以在每一個Controller中可以訪問這些數(shù)據(jù)。 1.定義全局數(shù)據(jù)綁定類 使用@M

    2024年02月09日
    瀏覽(19)
  • SpringBoot 使用lombok的@RequiredArgsConstructor注解進行Bean注入

    SpringBoot 使用lombok的@RequiredArgsConstructor注解進行Bean注入

    參考資料: lombok 使用 @RequiredArgsConstructor 注解完成 spring 注入問題 ?當我們使用 @Autowired 進行Bean注入的時候,IDEA會提示警告,不建議使用此方式進行注入。Spring官方更推薦使用構(gòu)造方法進行注入。 ?隨之而來的問題就是如果一個類中要注入多個對象的話,構(gòu)造方法進行注入

    2024年02月11日
    瀏覽(25)
  • 關(guān)于在 springboot 中使用 @Autowired 注解來對 TemplateEngine 進行自動裝配時,無法注入的問題。

    關(guān)于在 springboot 中使用 @Autowired 注解來對 TemplateEngine 進行自動裝配時,無法注入的問題。

    本文是基于江南一點雨的 Spring Boot+Vue 系列視頻教程第 三 章的第三節(jié),詳情參考Spring Boot+Vue系列視頻教程 在觀看學習這一節(jié)時,發(fā)現(xiàn)當進行手動渲染 Thymeleaf 模板時,通過 @Autowired 注解來對 TemplateEngine 進行自動裝配時,發(fā)現(xiàn) idea 對其顯示 No beans of \\\'TemplateEngine \\\' type of found。

    2024年02月02日
    瀏覽(30)
  • 如何在SpringBoot中使用@Value注解來設(shè)置默認值

    ??????在Spring Boot中,使用@Value注解可以為屬性設(shè)置默認值。 @Value注解可以用于注入以下類型的屬性: 1、基本數(shù)據(jù)類型(如字符串、整數(shù)、浮點數(shù)等) 2、基本數(shù)據(jù)類型的數(shù)組 3、集合類型(如List、Set等) 4、自定義數(shù)據(jù)類型,包括自定義對象和自定義對象的集合 5、Spri

    2024年02月11日
    瀏覽(16)
  • 快速教你如何使用postman工具進行接口測試?(配置全局token、JWT可用)

    快速教你如何使用postman工具進行接口測試?(配置全局token、JWT可用)

    現(xiàn)在很多人都在使用前后端分離進行項目開發(fā),那在后端開發(fā)過程中使用postman測試工具可快速便捷完成接口測試。但是在測試過程中,很多人發(fā)現(xiàn)因為JWT的鑒權(quán),導致半個小時就需要更新一下token,讓我們的測試變得復雜。 若是將token作為全局變量,每次都能夠自動獲取tok

    2024年02月15日
    瀏覽(24)
  • SpringBoot 如何使用 TestEntityManager 進行 JPA 集成測試, 如何使用

    SpringBoot 如何使用 TestEntityManager 進行 JPA 集成測試, 如何使用

    Spring Boot 是一個非常流行的 Java Web 開發(fā)框架,它簡化了開發(fā)過程,提高了開發(fā)效率。在開發(fā)過程中,我們通常需要使用 JPA 操作數(shù)據(jù)庫,為了保證代碼的質(zhì)量和正確性,我們需要進行集成測試。TestEntityManager 是 Spring Boot 提供的用于 JPA 集成測試的工具,它可以模擬 EntityManag

    2024年02月13日
    瀏覽(41)
  • SpringBoot 如何使用 @RequestBody 進行數(shù)據(jù)校驗

    SpringBoot 如何使用 @RequestBody 進行數(shù)據(jù)校驗

    在 Web 開發(fā)中,前臺向后臺發(fā)送數(shù)據(jù)是非常常見的場景。而在 SpringBoot 框架中,我們通常使用 @RequestBody 注解來接收前臺發(fā)送的 JSON 數(shù)據(jù),并將其轉(zhuǎn)化為 Java 對象。但是,接收到的數(shù)據(jù)并不一定是符合要求的,因此我們需要對其進行數(shù)據(jù)校驗。本文將介紹如何在 SpringBoot 中使用

    2024年02月10日
    瀏覽(19)
  • SpringBoot 如何使用 MockMvc 進行 Web 集成測試

    SpringBoot 如何使用 MockMvc 進行 Web 集成測試

    SpringBoot 是一個流行的 Java Web 開發(fā)框架,它提供了一些強大的工具和庫,使得開發(fā) Web 應(yīng)用程序變得更加容易。其中之一是 MockMvc,它提供了一種測試 SpringBoot Web 應(yīng)用程序的方式,可以模擬 HTTP 請求和響應(yīng)的行為。 在本文中,我們將介紹 SpringBoot 中的 MockMvc,演示如何使用它

    2024年02月16日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包