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

關于SpringBoot使用@ExceptionHandler注解局部異常處理

 更新時間:2023年07月11日 09:14:34   作者:硬件人某某某  
這篇文章主要介紹了關于SpringBoot使用@ExceptionHandler注解局部異常處理,SpringBoot提供了多種方式來處理異常,在本文中,我們將介紹SpringBoot中的@ExceptionHandler注解,演示如何使用它進行局部異常處理

介紹

在開發(fā) Web 應用程序時,異常處理是非常重要的一部分。SpringBoot 提供了多種方式來處理異常,其中之一是使用 @ExceptionHandler 注解進行局部異常處理。使用 @ExceptionHandler 注解,我們可以在 Controller 層或方法級別上處理異常,而不用在整個應用程序中處理。

@ExceptionHandler 注解

@ExceptionHandler 注解是 SpringFramework 提供的一個注解,用于處理控制器中出現的異常。當在控制器方法中拋出異常時,SpringBoot 會查找?guī)в?@ExceptionHandler 注解的方法,并調用它來處理異常。

下面是一個簡單的例子:

@RestController
public class UserController {
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable int id) {
        User user = userRepository.findById(id);
        if (user == null) {
            throw new UserNotFoundException("User not found");
        }
        return user;
    }
    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<ErrorResponse> handleUserNotFoundException(UserNotFoundException ex) {
        ErrorResponse error = new ErrorResponse(HttpStatus.NOT_FOUND.value(), ex.getMessage());
        return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
    }
}

在上面的代碼中,我們定義了一個 UserController 類,并實現了一個 getUser 方法。如果用戶不存在,則拋出 UserNotFoundException 異常。然后,我們使用 @ExceptionHandler 注解定義了一個 handleUserNotFoundException 方法,用于處理 UserNotFoundException 異常。在該方法中,我們創(chuàng)建了一個 ErrorResponse 對象,包含了錯誤響應的狀態(tài)碼和消息,然后將其封裝在 ResponseEntity 對象中返回。

如何使用 @ExceptionHandler 注解進行局部異常處理

要使用 @ExceptionHandler 注解進行局部異常處理,請按照以下步驟操作:

第 1 步:定義自定義異常

在代碼中定義自定義異常,繼承自 Exception 或 RuntimeException 類。例如:

public class UserNotFoundException extends RuntimeException {
    public UserNotFoundException(String message) {
        super(message);
    }
}

在上面的代碼中,我們定義了一個名為 UserNotFoundException 的自定義異常,它繼承自 RuntimeException 類。

第 2 步:拋出異常

在控制器方法中拋出自定義異常。例如:

@GetMapping("/users/{id}")
public User getUser(@PathVariable int id) {
    User user = userRepository.findById(id);
    if (user == null) {
        throw new UserNotFoundException("User not found");
    }
    return user;
}

在上面的代碼中,如果用戶不存在,則拋出 UserNotFoundException 異常。

第 3 步:處理異常

使用 @ExceptionHandler 注解定義一個方法,用于處理自定義異常。例如:

@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<ErrorResponse> handleUserNotFoundException(UserNotFoundException ex) {
    ErrorResponse error = new ErrorResponse(HttpStatus.NOT_FOUND.value(), ex.getMessage());
    return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
}

在上面的代碼中,我們使用 @ExceptionHandler(UserNotFoundException.class) 注解定義了一個方法 handleUserNotFoundException,用于處理 UserNotFoundException 異常。在該方法中,我們創(chuàng)建了一個 ErrorResponse 對象,包含了錯誤響應的狀態(tài)碼和消息,然后將其封裝在 ResponseEntity 對象中返回。

示例

以下是一個完整的示例:

UserController.java

@RestController
public class UserController {
    @Autowired
    private UserRepository userRepository;
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable int id) {
        User user = userRepository.findById(id);
        if (user == null) {
            throw new UserNotFoundException("User not found");
        }
        return user;
    }
    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        userRepository.save(user);
        return user;
    }
    @PutMapping("/users/{id}")
    public User updateUser(@PathVariable int id, @RequestBody User user) {
        User existingUser = userRepository.findById(id);
        if (existingUser == null) {
            throw new UserNotFoundException("User not found");
        }
        existingUser.setName(user.getName());
        existingUser.setAge(user.getAge());
        userRepository.save(existingUser);
        return existingUser;
    }
    @DeleteMapping("/users/{id}")
    public void deleteUser(@PathVariable int id) {
        UseruserRepository.deleteById(id);
    }
    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<ErrorResponse> handleUserNotFoundException(UserNotFoundException ex) {
        ErrorResponse error = new ErrorResponse(HttpStatus.NOT_FOUND.value(), ex.getMessage());
        return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
    }
}

UserNotFoundException.java

public class UserNotFoundException extends RuntimeException {
    public UserNotFoundException(String message) {
        super(message);
    }
}

ErrorResponse.java

public class ErrorResponse {
    private int status;
    private String message;
    public ErrorResponse(int status, String message) {
        this.status = status;
        this.message = message;
    }
    public int getStatus() {
        return status;
    }
    public String getMessage() {
        return message;
    }
}

在上面的代碼中,我們定義了一個 UserController 類,實現了 getUser、createUser、updateUser 和 deleteUser 方法。如果用戶不存在,則拋出 UserNotFoundException 異常。然后,我們使用 @ExceptionHandler 注解定義了一個 handleUserNotFoundException 方法,用于處理 UserNotFoundException 異常。在該方法中,我們創(chuàng)建了一個 ErrorResponse 對象,包含了錯誤響應的狀態(tài)碼和消息,然后將其封裝在 ResponseEntity 對象中返回。

原理

當控制器方法拋出異常時,SpringBoot 會在控制器類中查找?guī)в?@ExceptionHandler 注解的方法,并調用它來處理異常。@ExceptionHandler 注解的方法必須具有以下特征:

  • 方法必須是 public、沒有返回值,并且具有一個參數,該參數類型為拋出的異常類型。
  • 方法必須使用 @ExceptionHandler 注解進行注解,該注解的參數為拋出的異常類型。

當控制器方法拋出異常時,SpringBoot 將異常傳遞給帶有 @ExceptionHandler 注解的方法。該方法將處理異常,并返回一個 ResponseEntity 對象,該對象包含錯誤響應的狀態(tài)碼和消息。

總結

在本文中,我們介紹了 SpringBoot 中的 @ExceptionHandler 注解,演示了如何使用它進行局部異常處理。使用 @ExceptionHandler 注解,我們可以在 Controller 層或方法級別上處理異常。當控制器方法拋出異常時,SpringBoot 會查找?guī)в?@ExceptionHandler 注解的方法,并調用它來處理異常。要使用 @ExceptionHandler 注解進行局部異常處理,需要定義自定義異常、拋出異常和處理異常。

到此這篇關于關于SpringBoot使用@ExceptionHandler注解局部異常處理的文章就介紹到這了,更多相關@ExceptionHandler局部異常處理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java控制臺輸出百分比進度條示例

    java控制臺輸出百分比進度條示例

    這篇文章主要介紹了java控制臺輸出百分比進度條示例,需要的朋友可以參考下
    2014-04-04
  • 深入淺出講解Spring框架中依賴注入與控制反轉及應用

    深入淺出講解Spring框架中依賴注入與控制反轉及應用

    依賴注入(Dependency?Injection)和控制反轉(Inversion?of?Control)是同一個概念。具體含義是:當某個角色(可能是一個Java實例,調用者)需要另一個角色(另一個Java實例,被調用者)的協(xié)助時,在?傳統(tǒng)的程序設計過程中,通常由調用者來創(chuàng)建被調用者的實例
    2022-03-03
  • SpringBoot @value注解動態(tài)刷新問題小結

    SpringBoot @value注解動態(tài)刷新問題小結

    @Value注解 所對應的數據源來自項目的 Environment 中,我們可以將數據庫或其他文件中的數據,加載到項目的 Environment 中,然后 @Value注解 就可以動態(tài)獲取到配置信息了,這篇文章主要介紹了SpringBoot @value注解動態(tài)刷新,需要的朋友可以參考下
    2023-09-09
  • Java中的字符編碼問題處理心得總結

    Java中的字符編碼問題處理心得總結

    Java中的String類默認是Unicode編碼,大家平常所說的UTF-8就是使用最廣的一種unicode的實現方式,以下我們還是來看一下Java中的字符編碼問題處理心得總結:
    2016-06-06
  • java實現刪除某條信息并刷新當前頁操作

    java實現刪除某條信息并刷新當前頁操作

    這篇文章主要介紹了java實現刪除某條信息并刷新當前頁操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Java前后端分離的在線點餐系統(tǒng)實現詳解

    Java前后端分離的在線點餐系統(tǒng)實現詳解

    這是一個基于SpringBoot+Vue框架開發(fā)的在線點餐系統(tǒng)。首先,這是一個前后端分離的項目。具有一個在線點餐系統(tǒng)該有的所有功能,感興趣的朋友快來看看吧
    2022-01-01
  • Java代碼中如何設置輸出字符集為UTF-8

    Java代碼中如何設置輸出字符集為UTF-8

    這篇文章主要介紹了Java代碼中設置輸出字符集為UTF-8,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Java中的Static class詳解及實例代碼

    Java中的Static class詳解及實例代碼

    這篇文章主要介紹了 Java中的Static class詳解及實例代碼的相關資料,在Java中我們可以有靜態(tài)實例變量、靜態(tài)方法、靜態(tài)塊。類也可以是靜態(tài)的,需要的朋友可以參考下
    2017-03-03
  • Java設計模式之代理模式解析

    Java設計模式之代理模式解析

    這篇文章主要介紹了Java設計模式之代理模式解析,代理模式為一個對象提供一個替身,以控制對這個對象的訪問,即通過代理對象訪問目標對象,需要的朋友可以參考下
    2023-12-12
  • java開發(fā)微信分享到朋友圈功能

    java開發(fā)微信分享到朋友圈功能

    這篇文章主要為大家詳細介紹了java開發(fā)微信發(fā)送給朋友和分享到朋友圈功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07

最新評論