亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關(guān)于SpringBoot使用@ExceptionHandler注解局部異常處理

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

介紹

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

@ExceptionHandler 注解

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

下面是一個簡單的例子:

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

原理

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

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

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

總結(jié)

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

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

相關(guān)文章

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

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

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

    深入淺出講解Spring框架中依賴注入與控制反轉(zhuǎn)及應(yīng)用

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

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

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

    Java中的字符編碼問題處理心得總結(jié)

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

    java實現(xiàn)刪除某條信息并刷新當前頁操作

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

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

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

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

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

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

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

    Java設(shè)計模式之代理模式解析

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

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

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

最新評論