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

SpringMVC通過注解實現(xiàn)全局異常處理問題小結(jié)

 更新時間:2025年09月15日 10:20:27   作者:choice of  
文章介紹SpringMVC全局異常處理機制,通過@ControllerAdvice和@ExceptionHandler注解實現(xiàn)統(tǒng)一異常處理,提升代碼可維護性與響應(yīng)一致性,減少重復(fù)try-catch代碼,增強系統(tǒng)健壯性,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧

一、為什么需要全局異常處理?

開發(fā)應(yīng)用程序的過程中會遇到各種各樣的異常,如數(shù)據(jù)庫連接異常,網(wǎng)絡(luò)請求異常和業(yè)務(wù)邏輯異常等。傳統(tǒng)的try-catch模式在各個controller中處理由于太過于分散,代碼冗余度過高,導(dǎo)致維護成本過高。

全局處理能夠高效地解決這一問題

二、Spring全局異常的處理方式

SpringMVC通過@ControllerAdvice和@ExceptionHandler注解來實現(xiàn)全局異常處理

實現(xiàn)步驟:

1 創(chuàng)建自定義異常類
2 創(chuàng)建全局異常處理器,使用@ControllerAdvice注解
3 在處理器類中定義異常處理方法,使用@ExceptionHandler注解指定處理的異常類型
4 在異常處理方法中定義異常響應(yīng)的格式和內(nèi)容

三、具體實現(xiàn)

1 創(chuàng)建自定義異常類(以用戶未找到為例)

// 用戶未找到異常
public class UserNotFoundException extends RuntimeException {
    public UserNotFoundException() {
        super();
    }
    public UserNotFoundException(String message) {
        super(message);
    }
}
// 數(shù)據(jù)驗證異常
public class ValidationException extends RuntimeException {
    public ValidationException(String message) {
        super(message);
    }
}

2 創(chuàng)建全局異常處理器

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
// 全局異常處理器,會攔截所有控制器拋出的異常
@ControllerAdvice
public class GlobalExceptionHandler {
    // 處理用戶未找到異常
    @ExceptionHandler(UserNotFoundException.class)
    @ResponseBody  // 將返回結(jié)果轉(zhuǎn)換為JSON
    @ResponseStatus(HttpStatus.NOT_FOUND)  // 設(shè)置HTTP狀態(tài)碼為404
    public Result<Void> handleUserNotFoundException(UserNotFoundException e) {
        return Result.error(404, e.getMessage());
    }
    // 處理數(shù)據(jù)驗證異常
    @ExceptionHandler(ValidationException.class)
    @ResponseBody
    @ResponseStatus(HttpStatus.BAD_REQUEST)  // 設(shè)置HTTP狀態(tài)碼為400
    public Result<Void> handleValidationException(ValidationException e) {
        return Result.error(400, e.getMessage());
    }
    // 處理其他未捕獲的異常
    @ExceptionHandler(Exception.class)
    @ResponseBody
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)  // 設(shè)置HTTP狀態(tài)碼為500
    public Result<Void> handleOtherExceptions(Exception e) {
        // 實際項目中可以在這里記錄日志
        return Result.error(500, "服務(wù)器內(nèi)部錯誤:" + e.getMessage());
    }
}

3 在控制器中使用

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping("/{id}")
    public Result<User> getUser(@PathVariable Long id) {
        // 這里不再需要try-catch,異常會被全局異常處理器捕獲
        User user = userService.getUserById(id);
        if (user == null) {
            throw new UserNotFoundException("用戶不存在,ID: " + id);
        }
        return Result.success(user);
    }
    @PostMapping
    public Result<User> createUser(@RequestBody User user) {
        if (user.getName() == null || user.getName().isEmpty()) {
            throw new ValidationException("用戶名不能為空");
        }
        User savedUser = userService.saveUser(user);
        return Result.success(savedUser);
    }
}

四、工作原理

  1. 當(dāng)控制器方法中拋出異常時,Spring 會查找是否有匹配的@ExceptionHandler
  2. @ControllerAdvice注解的類會被 Spring 掃描到,并作為全局異常處理器
  3. Spring 會根據(jù)拋出的異常類型,找到對應(yīng)的@ExceptionHandler方法
  4. 執(zhí)行異常處理方法,返回統(tǒng)一的響應(yīng)結(jié)果

五、高級用法

  • 異常處理的優(yōu)先級
    • 控制器內(nèi)部的@ExceptionHandler優(yōu)先于全局異常處理器
    • 子類異常的處理器優(yōu)先于父類異常的處理器
  • 結(jié)合日志記錄
@ExceptionHandler(Exception.class)
public Result<Void> handleOtherExceptions(Exception e) {
    log.error("發(fā)生未捕獲異常", e);  // 記錄異常日志
    return Result.error(500, "服務(wù)器內(nèi)部錯誤");
}

六、總結(jié)

全局異常處理是 SpringMVC框架中一個非常實用的功能,通過@ControllerAdvice@ExceptionHandler注解可以輕松實現(xiàn):

  1. 減少重復(fù)代碼,提高開發(fā)效率
  2. 統(tǒng)一異常響應(yīng)格式,便于前端處理
  3. 集中管理異常處理邏輯,便于維護
  4. 可以結(jié)合日志記錄,方便問題排查

掌握全局異常處理,能讓你的代碼更加健壯、優(yōu)雅。

到此這篇關(guān)于SpringMVC通過注解實現(xiàn)全局異常處理問題小結(jié)的文章就介紹到這了,更多相關(guān)SpringMVC全局異常處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot主配置文件解析

    Springboot主配置文件解析

    Spring?Boot主配置文件application.yml支持多種核心值類型,包括字符串、數(shù)字、布爾值等,文章詳細介紹了Profile環(huán)境配置和加載位置,本文給大家詳細介紹Springboot主配置文件,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • MapTask階段shuffle源碼分析

    MapTask階段shuffle源碼分析

    今天小編就為大家分享一篇關(guān)于MapTask階段shuffle源碼分析,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java中CompletableFuture?的詳細介紹

    Java中CompletableFuture?的詳細介紹

    這篇文章主要介紹了Java中的CompletableFuture,通過創(chuàng)建?CompletableFuture?的對象的工廠方法展開詳細的內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-05-05
  • java多線程中的異常處理機制簡析

    java多線程中的異常處理機制簡析

    在java多線程程序中,所有線程都不允許拋出未捕獲的checked exception,也就是說各個線程需要自己把自己的checked exception處理掉,需要了解的朋友可以參考下
    2012-11-11
  • @FeignClient注解中屬性contextId的使用說明

    @FeignClient注解中屬性contextId的使用說明

    這篇文章主要介紹了@FeignClient注解中屬性contextId的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 使用Spring boot + jQuery上傳文件(kotlin)功能實例詳解

    使用Spring boot + jQuery上傳文件(kotlin)功能實例詳解

    本文通過實例代碼給大家介紹了使用Spring boot + jQuery上傳文件(kotlin) 功能,需要的朋友可以參考下
    2017-07-07
  • Mybatis SqlSessionFactory與SqlSession詳細講解

    Mybatis SqlSessionFactory與SqlSession詳細講解

    SqlSessionFactory是MyBatis的核心類之一,其最重要的功能就是提供創(chuàng)建MyBatis的核心接口SqlSession,所以我們需要先創(chuàng)建SqlSessionFactory,為此我們需要提供配置文件和相關(guān)的參數(shù)
    2022-11-11
  • 解決Java項目啟動報錯:Logback?configuration?error?detected:問題

    解決Java項目啟動報錯:Logback?configuration?error?detected:問題

    這篇文章主要介紹了解決Java項目啟動報錯:Logback?configuration?error?detected:問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java用自定義的類作為HashMap的key值實例

    Java用自定義的類作為HashMap的key值實例

    下面小編就為大家?guī)硪黄狫ava用自定義的類作為HashMap的key值實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • MyBatis結(jié)果映射(ResultMap)的使用

    MyBatis結(jié)果映射(ResultMap)的使用

    在MyBatis中,結(jié)果映射是實現(xiàn)數(shù)據(jù)庫結(jié)果集到Java對象映射的核心,它不僅支持簡單的字段映射,還能處理字段名不一致、嵌套對象和集合映射等復(fù)雜場景,通過ResultMap,開發(fā)者可以靈活定義映射關(guān)系,以適應(yīng)各種需求,感興趣的可以了解一下
    2024-09-09

最新評論

宁南县| 江门市| 伽师县| 鄱阳县| 灌云县| 河东区| 临夏县| 应用必备| 巢湖市| 乐清市| 且末县| 杨浦区| 聂荣县| 宜阳县| 侯马市| 柘城县| 区。| 鹤岗市| 犍为县| 岫岩| 益阳市| 江华| 清涧县| 镇平县| 九龙县| 新源县| 全南县| 普格县| 乐陵市| 新乡市| 略阳县| 罗城| 称多县| 贡觉县| 德惠市| 莲花县| 营口市| 中西区| 新昌县| 呼图壁县| 湖口县|