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

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

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

介紹

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

@ExceptionHandler 注解

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

下面是一個(gè)簡單的例子:

@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);
    }
}

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

如何使用 @ExceptionHandler 注解進(jìn)行局部異常處理

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

第 1 步:定義自定義異常

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

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

在上面的代碼中,我們定義了一個(gè)名為 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 注解定義一個(gè)方法,用于處理自定義異常。例如:

@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) 注解定義了一個(gè)方法 handleUserNotFoundException,用于處理 UserNotFoundException 異常。在該方法中,我們創(chuàng)建了一個(gè) ErrorResponse 對象,包含了錯(cuò)誤響應(yīng)的狀態(tài)碼和消息,然后將其封裝在 ResponseEntity 對象中返回。

示例

以下是一個(gè)完整的示例:

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;
    }
}

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

原理

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

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

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

總結(jié)

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

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

相關(guān)文章

  • java控制臺輸出百分比進(jìn)度條示例

    java控制臺輸出百分比進(jìn)度條示例

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

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

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

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

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

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

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

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

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

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

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

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

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

    Java中的Static class詳解及實(shí)例代碼

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

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

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

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

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

最新評論