欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot中的@RestControllerAdvice注解詳解

 更新時間:2024年01月16日 09:34:12   作者:加油當(dāng)當(dāng)  
這篇文章主要介紹了SpringBoot中的@RestControllerAdvice注解詳解,RestControllerAdvice注解用于創(chuàng)建全局異常處理類,用于捕獲和處理整個應(yīng)用程序中的異常,需要的朋友可以參考下

1. @RestControllerAdvice注解詳解

1.1 概述

@RestControllerAdvice注解是Spring MVC和Spring Boot應(yīng)用程序中用于定義全局異常處理類的注解,它是@ControllerAdvice注解的特殊版本,用于RESTful風(fēng)格的應(yīng)用程序。

@RestControllerAdvice可以捕獲整個應(yīng)用程序中拋出的異常,并對它們進(jìn)行處理。這樣可以實(shí)現(xiàn)在整個應(yīng)用程序范圍內(nèi)統(tǒng)一處理異常的目標(biāo);

@RestControllerAdvice注解實(shí)際上是@ControllerAdvice和@ResponseBody注解的組合。這意味著,當(dāng)你使用@RestControllerAdvice注解時,異常處理方法的返回值將自動轉(zhuǎn)換為HTTP響應(yīng)的主體;

1.2 用途

@RestControllerAdvice注解用于創(chuàng)建全局異常處理類,用于捕獲和處理整個應(yīng)用程序中的異常。它適用于RESTful風(fēng)格的應(yīng)用程序,因為它自動將異常處理方法的返回值轉(zhuǎn)換為HTTP響應(yīng)的主體。

1.3 基本使用

要使用@RestControllerAdvice注解,只需在類上添加該注解。這個類應(yīng)包含一個或多個帶有@ExceptionHandler注解的方法,用于處理不同類型的異常。

例如:

@RestControllerAdvice
public class GlobalRestExceptionHandler {
    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
    }
    @ExceptionHandler(IllegalArgumentException.class)
    public ResponseEntity<String> handleIllegalArgumentException(IllegalArgumentException ex) {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
    }
}

1.4 屬性

@RestControllerAdvice注解繼承了@ControllerAdvice注解的屬性:

annotations:

用于指定需要掃描的其他注解。只有帶有這些注解的類中的異常處理方法才會被全局異常處理類處理。

basePackages:

別名:value

用于指定需要掃描的包名。只有這些包下的類中的異常處理方法才會被全局異常處理類處理。

value:

是默認(rèn)的屬性;

用于指定要處理的異常類型。如果沒有指定value屬性,則默認(rèn)處理所有的異常類型;

basePackageClasses:

用于指定需要掃描的類。只有這些類中的異常處理方法才會被全局異常處理類處理。

assignableTypes:

用于指定需要掃描的類或接口。只有這些類或接口的實(shí)現(xiàn)類中的異常處理方法才會被全局異常處理類處理。

這些屬性可以幫助你限制全局異常處理類的作用范圍,使其只處理特定包、類或接口下的異常。

1.5 與@ExceptionHandler的結(jié)合

@RestControllerAdvice通常與@ExceptionHandler注解一起使用。在全局異常處理類中,你可以定義多個帶有@ExceptionHandler注解的方法,用于處理不同類型的異常。當(dāng)指定類型的異常在整個應(yīng)用程序中拋出時,相應(yīng)的`@ExceptionHandler方法將被調(diào)用以處理該異常。由于@RestControllerAdvice注解自動將異常處理方法的返回值轉(zhuǎn)換為HTTP響應(yīng)的主體,因此,你無需使用@ResponseBody`注解。

例如:

@RestControllerAdvice
public class GlobalRestExceptionHandler {
    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
    }
    @ExceptionHandler(IllegalArgumentException.class)
    public ResponseEntity<String> handleIllegalArgumentException(IllegalArgumentException ex) {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
    }
    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleException(Exception ex) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An unexpected error occurred: " + ex.getMessage());
    }
}

在上面的代碼中,我們定義了一個全局RESTful異常處理類,并處理了三種類型的異常:UserNotFoundException、IllegalArgumentException和Exception。對于每種異常,我們分別返回一個帶有HTTP狀態(tài)碼和錯誤消息的ResponseEntity對象。由于我們使用了@RestControllerAdvice注解,異常處理方法的返回值將自動轉(zhuǎn)換為HTTP響應(yīng)的主體。

1.6 總結(jié)

@RestControllerAdvice注解是一個用于定義全局RESTful異常處理類的類級別注解。通過使用@RestControllerAdvice和@ExceptionHandler注解,你可以實(shí)現(xiàn)在整個應(yīng)用程序范圍內(nèi)統(tǒng)一處理RESTful風(fēng)格的異常。它自動將異常處理方法的返回值轉(zhuǎn)換為HTTP響應(yīng)的主體,使得代碼更加簡潔、可讀和可維護(hù)。

2. @RestControllerAdvice注解 與 @ControllerAdvice注解的區(qū)別

特性@ControllerAdvice注解@RestControllerAdvice注解【實(shí)】
類型Class<?extends Throwable>[]String
適用場景適用于傳統(tǒng)的Web應(yīng)用程序,需要進(jìn)行視圖解析和渲染的場景適用于構(gòu)建RESTful風(fēng)格的Web服務(wù),需要直接返回JSON格式響應(yīng)體的場景
返回值返回視圖名稱或包裝后的ModelAndView對象,用于視圖解析和渲染返回JSON格式的響應(yīng)體,用于直接返回給客戶端
作用處理控制器中的異常、綁定和預(yù)處理等操作,并在多個控制器中共享處理控制器中的異常、綁定和預(yù)處理等操作,并直接返回JSON格式的響應(yīng)體,用于構(gòu)建RESTful風(fēng)格的Web服務(wù)
使用的注解@ExceptionHandler、@InitBinder和@ModelAttribute等注解@ExceptionHandler、@InitBinder和@ModelAttribute等注解
返回值轉(zhuǎn)換方式通過視圖解析器和模板引擎將返回值轉(zhuǎn)換為HTML或其他格式的響應(yīng)體直接將返回值轉(zhuǎn)換為JSON格式的響應(yīng)體
返回值的處理方式需要進(jìn)行視圖解析和渲染,將結(jié)果包裝成HTTP響應(yīng)體,再返回給客戶端直接將結(jié)果包裝成HTTP響應(yīng)體,并返回給客戶端

到此這篇關(guān)于SpringBoot中的@RestControllerAdvice注解詳解的文章就介紹到這了,更多相關(guān)@RestControllerAdvice注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring?Security權(quán)限管理小結(jié)

    Spring?Security權(quán)限管理小結(jié)

    SpringSecurity是一個權(quán)限管理框架,核心是認(rèn)證和授權(quán),前面已經(jīng)系統(tǒng)的給大家介紹過了認(rèn)證的實(shí)現(xiàn)和源碼分析,本文重點(diǎn)來介紹下權(quán)限管理,需要的朋友可以參考下
    2022-08-08
  • 通過Java創(chuàng)建Socket連接到服務(wù)器方式

    通過Java創(chuàng)建Socket連接到服務(wù)器方式

    這篇文章主要介紹了通過Java創(chuàng)建Socket連接到服務(wù)器方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java如何判斷一個url是否有效

    Java如何判斷一個url是否有效

    URL類提供了一個openConnection()方法,可以打開一個連接并返回一個URLConnection對象,該對象可以用來檢查連接是否有效,這篇文章主要介紹了Java判斷一個url是否有效,需要的朋友可以參考下
    2023-09-09
  • Mybatis-plus插入后返回元素id的問題

    Mybatis-plus插入后返回元素id的問題

    這篇文章主要介紹了Mybatis-plus插入后返回元素id的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • spring cloud升級到spring boot 2.x/Finchley.RELEASE遇到的坑

    spring cloud升級到spring boot 2.x/Finchley.RELEASE遇到的坑

    這篇文章主要介紹了spring cloud升級到spring boot 2.x/Finchley.RELEASE遇到的坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • java實(shí)現(xiàn)打印日歷

    java實(shí)現(xiàn)打印日歷

    這篇文章主要為大家詳細(xì)介紹了java打印日歷的實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 簡單了解java類的初始化以及類的實(shí)例化

    簡單了解java類的初始化以及類的實(shí)例化

    這篇文章主要介紹了簡單了解java類的初始化以及類的實(shí)例化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 解決Long類型后端到前端精度丟失問題

    解決Long類型后端到前端精度丟失問題

    文章討論了后端Long類型數(shù)據(jù)通過JSON傳遞到前端時可能出現(xiàn)的精度丟失問題,原因在于JavaScript的Number類型精度限制,提出了兩種解決方案:將Long類型序列化為String類型,或者配置全局的ObjectMapper使用ToStringSerializer,通過自定義JacksonConfig類
    2025-01-01
  • 關(guān)于Mybatis的@param注解及多個傳參

    關(guān)于Mybatis的@param注解及多個傳參

    這篇文章主要介紹了關(guān)于Mybatis的@param注解及多個傳參,@Param的作用就是給參數(shù)命名,比如在mapper里面某方法A(int id),當(dāng)添加注解后A(@Param(“userId”) int id),也就是說外部想要取出傳入的id值,只需要取它的參數(shù)名userId就可以了,需要的朋友可以參考下
    2023-05-05
  • 一個簡單的類加載器URLClassLoader案例

    一個簡單的類加載器URLClassLoader案例

    這篇文章主要介紹了一個簡單的類加載器URLClassLoader案例,這里寫了一個小 demo,來加深對于反射的理解,需要的朋友可以參考下
    2023-04-04

最新評論