精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring MVC 中,優(yōu)雅處理異常的六種方式!

開(kāi)發(fā)
本文,我們分析了 Spring MVC優(yōu)雅處理異常的幾種方法以及代碼示例,我們可以根據(jù)具體需求選擇合適的方法。

異常處理是每個(gè) Java程序員需要面對(duì)的一個(gè)問(wèn)題,在Spring中,提供了多種機(jī)制來(lái)處理控制器拋出的異常,確保應(yīng)用程序在面對(duì)各種錯(cuò)誤情況時(shí)能夠優(yōu)雅地響應(yīng)。這篇文章,我們來(lái)詳細(xì)分析Spring MVC中,幾種優(yōu)雅處理異常的方式。

1. 使用@ExceptionHandler注解

@ExceptionHandler注解允許在單個(gè)Controller中定義處理特定異常的方法。當(dāng) Controller的方法拋出指定的異常時(shí),Spring會(huì)調(diào)用相應(yīng)的處理方法。

如下示例,展示了如何在 Controller層優(yōu)雅處理異常:

@Controller
public class MyController {

    @RequestMapping("/example")
    public String example() {
        // 可能拋出異常的業(yè)務(wù)邏輯
        if (1/0) {
            throw new CustomException("自定義異常發(fā)生");
        }
        return "success";
    }

    @ExceptionHandler(CustomException.class)
    public ModelAndView handleCustomException(CustomException ex) {
        ModelAndView mav = new ModelAndView();
        mav.addObject("message", ex.getMessage());
        mav.setViewName("errorPage");
        return mav;
    }
}

優(yōu)點(diǎn): 簡(jiǎn)單直觀,適用于單個(gè)控制器的異常處理。

缺點(diǎn): 如果多個(gè)控制器需要相同的異常處理邏輯,需要在每個(gè)控制器中重復(fù)定義。

2. 使用@ControllerAdvice注解

@ControllerAdvice是一種全局的異常處理方式,可以應(yīng)用于所有 Controller。通過(guò)將異常處理邏輯集中在一個(gè)地方,可以避免代碼重復(fù),提高維護(hù)性。

如下示例,展示了如何使用@ControllerAdvice優(yōu)雅處理全局異常:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(CustomException.class)
    public ModelAndView handleCustomException(CustomException ex) {
        ModelAndView mav = new ModelAndView();
        mav.addObject("message", ex.getMessage());
        mav.setViewName("errorPage");
        return mav;
    }

    @ExceptionHandler(Exception.class)
    public ModelAndView handleGeneralException(Exception ex) {
        ModelAndView mav = new ModelAndView();
        mav.addObject("message", "發(fā)生了一個(gè)錯(cuò)誤: " + ex.getMessage());
        mav.setViewName("errorPage");
        return mav;
    }
}

優(yōu)點(diǎn):

  • 全局統(tǒng)一管理異常處理邏輯。
  • 代碼更清晰,易于維護(hù)。

缺點(diǎn):

  • 全局處理不適用于需要針對(duì)某些控制器有特殊處理需求的情況,需結(jié)合其他方法使用。

3. 實(shí)現(xiàn)HandlerExceptionResolver接口

HandlerExceptionResolver 是一種更底層的異常處理機(jī)制,通過(guò)實(shí)現(xiàn)該接口,開(kāi)發(fā)者可以自定義異常解析邏輯。

如下示例,展示了如何實(shí)現(xiàn)HandlerExceptionResolver接口優(yōu)雅處理異常:

public class MyExceptionResolver implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request,
                                         HttpServletResponse response,
                                         Object handler,
                                         Exception ex) {
        ModelAndView mav = new ModelAndView();
        if (ex instanceof CustomException) {
            mav.addObject("message", ex.getMessage());
            mav.setViewName("customErrorPage");
        } else {
            mav.addObject("message", "未知錯(cuò)誤");
            mav.setViewName("errorPage");
        }
        return mav;
    }
}

配置:

在 Spring 配置文件中注冊(cè)自定義異常解析器:

<bean class="com.example.MyExceptionResolver"/>

優(yōu)點(diǎn):

  • 高度靈活,可以處理各種復(fù)雜的異常情景。

缺點(diǎn):

  • 需要更多的配置和實(shí)現(xiàn)工作。
  • 不如注解方式直觀,適用性較低。

4. 使用@ResponseStatus注解

@ResponseStatus注解可以用于自定義異常對(duì)應(yīng)的 HTTP 狀態(tài)碼和錯(cuò)誤信息,當(dāng)拋出帶有該注解的異常時(shí),Spring會(huì)自動(dòng)設(shè)置相應(yīng)的狀態(tài)碼。

如下示例,展示了如何使用@ResponseStatus注解優(yōu)雅處理異常:

@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "資源未找到")
public class ResourceNotFoundException extends RuntimeException {
    public ResourceNotFoundException(String message) {
        super(message);
    }
}

使用:

@Controller
public class MyController {

    @RequestMapping("/resource")
    public String getResource() {
        // 假設(shè)資源未找到
        throw new ResourceNotFoundException("資源ID不存在");
    }
}

優(yōu)點(diǎn):簡(jiǎn)單快捷,適用于直接映射到特定 HTTP 狀態(tài)碼的異常情況。

缺點(diǎn):無(wú)法返回自定義的錯(cuò)誤頁(yè)面或更復(fù)雜的錯(cuò)誤信息。

5. 使用ResponseEntity和@RestControllerAdvice

在構(gòu)建 RESTful API時(shí),常用ResponseEntity來(lái)返回自定義的錯(cuò)誤響應(yīng),并結(jié)合@RestControllerAdvice可以全局處理異常并返回 JSON 格式的錯(cuò)誤信息。

如下示例,展示了如何使用ResponseEntity和@RestControllerAdvice來(lái)處理 RESTful API的異常:

@RestControllerAdvice
public class RestExceptionHandler {

    @ExceptionHandler(CustomException.class)
    public ResponseEntity<ErrorResponse> handleCustomException(CustomException ex) {
        ErrorResponse error = new ErrorResponse("CUSTOM_ERROR", ex.getMessage());
        return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST);
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> handleGeneralException(Exception ex) {
        ErrorResponse error = new ErrorResponse("GENERAL_ERROR", "內(nèi)部服務(wù)器錯(cuò)誤");
        return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

public class ErrorResponse {
    private String errorCode;
    private String errorMessage;

    // 構(gòu)造方法、getter 和 setter
}

優(yōu)點(diǎn):

  • 適用于 RESTful 服務(wù),能夠返回結(jié)構(gòu)化的錯(cuò)誤信息(如 JSON)。
  • 全局統(tǒng)一管理,易于維護(hù)。

缺點(diǎn):

  • 需要定義額外的錯(cuò)誤響應(yīng)類。

6. 使用@ControllerAdvice和@ExceptionHandler

如果使用 Spring Boot,可以更便捷地使用 @ControllerAdvice 結(jié)合自動(dòng)配置實(shí)現(xiàn)異常處理。

如下示例,展示了如何使用@ControllerAdvice和@ExceptionHandler來(lái)處理異常:

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<ValidationErrorResponse> handleValidationExceptions(
            MethodArgumentNotValidException ex) {
        ValidationErrorResponse errors = new ValidationErrorResponse();
        ex.getBindingResult().getAllErrors().forEach((error) -> {
            errors.addError(((FieldError) error).getField(), error.getDefaultMessage());
        });
        return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
    }

    // 其它異常處理方法
}

優(yōu)點(diǎn):

  • 與 Spring Boot 無(wú)縫集成,減少配置。
  • 提供了諸多便利的功能,如自動(dòng)處理驗(yàn)證錯(cuò)誤等。

總結(jié)

本文,我們分析了 Spring MVC優(yōu)雅處理異常的幾種方法以及代碼示例,我們可以根據(jù)具體需求選擇合適的方法:

  • 局部控制器處理:使用 @ExceptionHandler 注解,適用于單個(gè)控制器的特定異常處理。
  • 全局處理:使用 @ControllerAdvice 或 @RestControllerAdvice,適用于跨多個(gè)控制器的統(tǒng)一異常處理。
  • 自定義解析:實(shí)現(xiàn) HandlerExceptionResolver 接口,適用于需要高度自定義的異常處理邏輯。
  • 狀態(tài)碼注解:使用 @ResponseStatus 注解,適用于簡(jiǎn)單的異常狀態(tài)碼映射。
  • RESTful API:結(jié)合 ResponseEntity 和全局異常處理,返回結(jié)構(gòu)化的錯(cuò)誤響應(yīng)。

從實(shí)際工作來(lái)看,@ControllerAdvice 或 @RestControllerAdvice是使用頻率最高的一種方式。

責(zé)任編輯:趙寧寧 來(lái)源: 猿java
相關(guān)推薦

2023-07-10 08:00:13

架構(gòu)Rest返回值

2024-05-30 08:51:28

Spring數(shù)據(jù)分布式

2017-06-26 10:35:58

前端JavaScript繼承方式

2024-08-30 11:11:01

2019-05-16 13:00:18

異步編程JavaScript回調(diào)函數(shù)

2025-02-27 00:00:30

SpringJava方式

2009-02-11 09:46:00

ASON網(wǎng)絡(luò)演進(jìn)

2022-12-06 10:39:43

Spring事務(wù)失效

2020-07-31 11:12:39

安全威脅網(wǎng)絡(luò)攻擊網(wǎng)絡(luò)安全

2020-04-27 09:00:00

雙因素認(rèn)證身份認(rèn)證生物識(shí)別

2022-01-14 10:34:50

黑客隱藏蹤跡網(wǎng)絡(luò)安全

2022-03-23 12:55:50

農(nóng)業(yè)物聯(lián)網(wǎng)

2025-04-29 08:21:30

ANRAndroidUI

2024-10-12 08:18:21

Spring接口組件

2025-04-25 11:25:00

SpringBean初始化

2021-01-08 10:52:22

物聯(lián)網(wǎng)萬(wàn)物互聯(lián)IoT,Interne

2023-05-10 13:58:13

服務(wù)限流系統(tǒng)

2019-07-19 07:33:57

供應(yīng)鏈物聯(lián)網(wǎng)IOT

2011-05-24 09:22:44

Spring3異常處理

2022-03-28 20:57:31

私有屬性class屬性和方法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美一级免费视频| 日韩风俗一区 二区| a级黄色片网站| www香蕉视频| 久久99伊人| 久久这里有精品视频| 日本不卡视频一区| 麻豆精品蜜桃| 夜夜嗨av一区二区三区中文字幕| 激情伦成人综合小说| 这里只有精品国产| 影音先锋亚洲一区| 中文字幕亚洲字幕| 亚洲自拍偷拍精品| 欧美黄页免费| 狠狠色噜噜狠狠狠狠97| 色撸撸在线观看| 九九热视频在线观看| 国产精品18久久久| 国产成人精品视| 久久精品国产亚洲av无码娇色| 久操成人av| 精品久久久久久久久久久久包黑料| 久久综合久久色| free性欧美| 亚洲欧洲中文日韩久久av乱码| 美乳视频一区二区| 亚洲国产精品久久久久久6q| 奇米四色…亚洲| 国产91成人video| 欧美黄色一区二区三区| 色喇叭免费久久综合网| 亚洲久久久久久久久久久| 极品人妻一区二区| 色8久久久久| 色诱亚洲精品久久久久久| 日韩a级黄色片| 欧美天天影院| 国产精品国产三级国产普通话三级| 欧美高清视频一区二区三区在线观看| 亚洲av无码片一区二区三区| 国内精品伊人久久久久av影院| 国产精品69av| 日本免费在线观看视频| 国产精品日韩| 97热在线精品视频在线观看| 久久这里只有精品免费| 一区二区三区在线电影| www.色综合| 人与动物性xxxx| 成人免费电影网址| 在线视频欧美日韩| 色综合99久久久无码国产精品| 亚洲电影男人天堂| 亚洲另类图片色| 亚洲自拍偷拍一区二区| 欧美美乳视频| 中文字幕亚洲国产| 污污视频网站在线免费观看| 日韩1区2区| 色噜噜久久综合伊人一本| 欧美老女人性生活视频| 日韩成人a**站| 久久综合色影院| 国产又黄又爽又无遮挡| 欧美国产三区| 91av在线免费观看| 亚洲s码欧洲m码国产av| 日韩av不卡一区二区| 国产欧美日韩精品专区| 国产精品主播一区二区| 国产精品一区二区视频| 国产精品一区二区三区免费观看| 精品久久国产视频| 成人av网址在线| 欧美黑人xxxxx| 天堂地址在线www| 亚洲色图在线播放| 无码人妻少妇伦在线电影| 午夜伦理福利在线| 色天使色偷偷av一区二区| 成年网站在线播放| 玖玖玖电影综合影院| 欧美不卡视频一区| 成人免费网站黄| 99久久久国产精品美女| 久久国产精品影片| 日韩无码精品一区二区三区| 日韩在线观看一区二区| 91热精品视频| 日韩二区三区| 综合激情成人伊人| 国产69精品久久久久久久| 99精品在免费线偷拍| 日韩欧美国产成人一区二区| 成年人在线观看av| 欧美电影三区| 97婷婷涩涩精品一区| 中文字幕在线2019| 99久免费精品视频在线观看| 亚洲欧美国产不卡| 成人国产电影在线观看| 精品视频一区三区九区| 国产成人精品一区二区三区在线观看| 日本精品影院| 日韩视频免费在线观看| 国产性猛交╳xxx乱大交| 极品少妇xxxx偷拍精品少妇| 久久国产精品 国产精品| 黄色成年人视频在线观看| 欧美午夜精品在线| 无码人妻少妇色欲av一区二区| 久久99青青| 欧美激情一区二区三区高清视频| 日韩欧美一级大片| 91丨国产丨九色丨pron| www.18av.com| 欧美视频第一| 亚洲天堂开心观看| 久久久久久久久影院| 国产成人自拍网| 亚洲欧美日韩国产成人综合一二三区 | 亚洲精品之草原avav久久| 美国黄色小视频| 免费成人性网站| 日韩av不卡在线播放| 成年女人在线看片| 精品国产乱码久久久久久久久 | 国产综合内射日韩久| 国产大片一区| 国产精品伦子伦免费视频| 天堂91在线| 精品美女国产在线| 日本不卡视频一区| 尹人成人综合网| av蓝导航精品导航| 亚洲卡一卡二| 欧美一区二区大片| 外国一级黄色片| 国产麻豆欧美日韩一区| 一区二区三区四区不卡| 久久亚洲人体| 色老头一区二区三区在线观看| 波多野结衣视频观看| 久久人人爽爽爽人久久久| www.av中文字幕| 久久97精品| 97精品国产97久久久久久| 色婷婷av一区二区三区之e本道| 亚洲综合色网站| 一区二区三区四区影院| 国产专区一区| 国产精品国产精品国产专区不卡| 欧美高清另类hdvideosexjaⅴ| 欧美变态口味重另类| 久久久久久久久久久网| www.欧美.com| 黄色国产精品视频| 国产日韩视频在线| 国产精品女人网站| 幼a在线观看| 91精品国产免费| 久久久久亚洲av成人片| 北岛玲一区二区三区四区| 国产肥臀一区二区福利视频| 国产成人手机高清在线观看网站| 国产999精品| 91欧美在线视频| 欧美一区二区高清| 日韩毛片在线视频| 国产三级欧美三级日产三级99| 黄色三级视频在线| 亚洲精品小说| 精品视频一区在线| av成人在线观看| 欧美尺度大的性做爰视频| 天堂网av在线播放| 欧美这里有精品| 欧美成人精品欧美一级私黄| eeuss影院一区二区三区 | 久久精品国产99| 国产日产欧美一区二区| 国产调教精品| 国产精品27p| 欧美性爽视频| 国产亚洲精品久久久优势| 一区二区三区免费在线| 亚洲妇女屁股眼交7| 国产精品久久久久久久av| 国产一区91精品张津瑜| 免费成人在线视频网站| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 午夜激情福利电影| av网站一区二区三区| 天天爽人人爽夜夜爽| 好看不卡的中文字幕| 色噜噜狠狠色综合网| 日韩成人久久| 国产精品久久9| 1024在线看片你懂得| 中文字幕av一区中文字幕天堂| 嫩草影院一区二区| 欧美日韩高清在线播放| av大片免费观看| 亚洲精品自拍动漫在线| 亚洲成人黄色av| 成人午夜视频免费看| 成人日韩在线视频| 裸体素人女欧美日韩| 日韩黄色短视频| 性欧美69xoxoxoxo| 日韩资源av在线| 久久夜色精品国产噜噜av小说| 91久久久精品| 九色成人搞黄网站| 日本国产一区二区三区| 成年人国产在线观看| 久久影视电视剧免费网站| 蝌蚪视频在线播放| 亚洲福利视频在线| 精品国产乱码一区二区三 | 7m精品福利视频导航| 一区二区三区伦理| 久久精品亚洲精品| aaa在线免费观看| 亚洲网站在线看| 色网站在线免费观看| 亚洲成色777777在线观看影院| 国产精品视频一区二区三区,| 欧美亚洲尤物久久| 日韩 国产 欧美| 岛国av一区二区三区| 香蕉视频一区二区| 亚洲一卡二卡三卡四卡无卡久久| 国产激情无码一区二区三区 | 久久久久久久福利| 亚洲激情图片qvod| av激情在线观看| 国产精品福利一区| 国产福利在线导航| 国产精品久99| 五月天免费网站| 日韩理论片一区二区| 美国一级片在线观看| 中文字幕在线一区二区三区| а天堂中文在线资源| 中文字幕一区二区三中文字幕| 蜜桃av免费在线观看| 国产精品灌醉下药二区| 亚洲欧洲综合网| 亚洲乱码国产乱码精品精98午夜 | 亚洲精品乱码| 欧美极品欧美精品欧美| 免费一级欧美片在线播放| 精品99在线视频| 日韩黄色在线观看| 五月婷婷六月丁香激情| 激情综合色播五月| 中文字幕乱妇无码av在线| 成人毛片在线观看| 人妻精品久久久久中文字幕 | 国产高潮国产高潮久久久91| 亚洲国产日产av| 亚洲男人的天堂在线视频| 色综合咪咪久久| 又骚又黄的视频| 欧美一级免费观看| 午夜一区在线观看| 中文字幕久久久av一区| 图片区小说区亚洲| 91精品国产乱码久久久久久蜜臀 | 久久影院亚洲| 日本中文字幕精品—区二区| 国产一区二区三区国产| 中文字幕在线播放视频| 中文字幕国产一区二区| 欧美色图亚洲天堂| 欧美日韩在线免费观看| 一级黄色大片免费| 欧美不卡123| 九色在线播放| 不卡av在线网站| 欧美一级鲁丝片| 国产欧美一区二区三区久久人妖| 亚洲无线观看| 欧洲一区二区在线| 夜间精品视频| 亚洲中文字幕无码不卡电影| 久久国产精品99精品国产| 国产原创剧情av| 国产精品视频观看| 国产奶水涨喷在线播放| 欧美撒尿777hd撒尿| 可以免费观看的毛片| 中文欧美在线视频| 成人国产电影在线观看| 91久久精品国产91久久性色| 日韩高清成人在线| 日本成人性视频| 国产免费成人| 免费观看黄网站| 中文字幕av在线一区二区三区| 免费视频一二三区| 欧美日韩精品欧美日韩精品一综合| 亚洲国产精品二区| 久久精品视频播放| 欧美freesex| 国产成人精品福利一区二区三区| 色综合咪咪久久网| 欧美 日韩精品| va亚洲va日韩不卡在线观看| 国产精品三区在线观看| 在线日韩国产精品| 日韩欧美在线番号| 久久久久久久久中文字幕| 国产亚洲人成a在线v网站| 免费精品视频一区二区三区| 激情久久久久| 亚洲天堂小视频| 亚洲色图在线播放| 亚洲天堂手机版| 一个色综合导航| 综合久久2023| 好吊色欧美一区二区三区四区| 欧美日韩蜜桃| 成人免费播放视频| 最好看的中文字幕久久| 中文字幕人妻一区二区在线视频| 亚洲免费人成在线视频观看| 精品丝袜在线| 好吊色欧美一区二区三区四区| 黑丝一区二区三区| 成人免费看片载| 亚洲制服欧美中文字幕中文字幕| 99视频在线观看免费| 日韩亚洲第一页| 亚洲青青久久| 黄频视频在线观看| 狠狠色狠狠色综合| 亚洲女人久久久| 欧美精品一级二级| 毛片在线不卡| 成人精品在线观看| 亚洲字幕久久| 久久久久久久久久影视| 亚洲国产一区二区a毛片| 高清国产mv在线观看| 久久久久久亚洲精品| 国产亚洲精品美女久久| 一本久道高清无码视频| gogo大胆日本视频一区| 中文字幕在线观看视频网站| 亚洲美女黄色片| 九九九伊在线综合永久| 一区二区三区欧美成人| 国产精品一区二区久久不卡| 久久亚洲AV无码| 亚洲第一偷拍网| 亚洲日本天堂| 亚洲 国产 欧美一区| 九九国产精品视频| 免费在线视频观看| 日韩国产欧美精品在线| 日本一道高清亚洲日美韩| 一区二区在线不卡| 国产高清在线观看免费不卡| 国产在线视频在线观看| 亚洲精品小视频| 国产极品一区| 日韩成人手机在线| 91视频免费播放| 在线观看不卡的av| 欧美精品18videosex性欧美| 小说区图片区色综合区| 欧美三级午夜理伦三级富婆| 亚洲欧美国产毛片在线| 在线观看xxx| 国产精品伦子伦免费视频| 欧美啪啪一区| 久久久久久九九九九九| 欧美精品1区2区| 国产ktv在线视频| 亚洲一二三区精品| 成人黄色小视频在线观看| 一区二区乱子伦在线播放| 欧美国产中文字幕| 国产亚洲精品美女久久久久久久久久| 一起操在线视频| 精品久久久久久| 麻豆91在线| 欧美高清视频一区| 国产成人福利片| 一区二区视频网| 2024亚洲男人天堂| 亚洲第一天堂| xxx在线播放| 欧美精品一区二区三| 黄页免费欧美| 国产a级一级片| 亚洲中国最大av网站|