精品欧美一区二区三区在线观看 _久久久久国色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)

久久精品综合| 亚洲插插视频| 黑人巨大精品欧美一区| 久久大大胆人体| 手机在线播放av| 成人影院在线播放| 久久综合九色综合欧美亚洲| 国产成人精品电影久久久| 欧美成人国产精品一区二区| 91超碰碰碰碰久久久久久综合| 中文字幕在线一区| 国产精品对白一区二区三区| 国产原创视频在线| 久久亚洲国产| 精品久久久久一区二区国产| 久久久久久久午夜| 在线播放麻豆| 成人永久免费视频| 国产精品激情av电影在线观看| 亚洲天堂网av在线| 香蕉久久夜色精品国产更新时间 | 综合国产在线| 亚洲的天堂在线中文字幕| 欧美在线观看视频网站| 亚洲小说区图片| 久久精品亚洲乱码伦伦中文| 成人自拍性视频| 日韩精品手机在线| 亚洲a在线视频| 亚洲精品狠狠操| mm131亚洲精品| 大香伊人久久| 中文字幕中文字幕一区二区| 精品国产免费人成电影在线观... 精品国产免费久久久久久尖叫 | 丰满少妇在线观看资源站| jizz亚洲女人高潮大叫| 亚洲成人av在线电影| 神马影院午夜我不卡| 男人天堂一区二区| 麻豆精品一区二区三区| 77777亚洲午夜久久多人| 日韩在线观看免| 亚洲最好看的视频| 精品人伦一区二区色婷婷| 天天干天天av| 欧美黄色三级| 欧美日韩亚洲激情| av网站大全免费| 国内精品不卡| 中文字幕欧美日韩一区| 久久精品国产99精品国产亚洲性色| 国产视频一二三四区| 日本aⅴ亚洲精品中文乱码| 97免费在线视频| 欧美精品久久久久性色| jlzzjlzz亚洲女人| 亚洲免费视频网站| 免费不卡的av| 高清一区二区三区av| 欧美日韩在线播放| 亚洲欧美日韩一级| 成人免费在线观看视频| 色综合久久综合网欧美综合网| 国产美女在线一区| 欧美色图天堂| 亚洲国产综合视频在线观看| 中文字幕乱码免费| 国产黄网站在线观看| 国产精品久久久久毛片软件| 五月天久久狠狠| 成人综合影院| 国产精品无人区| 亚洲自拍的二区三区| av资源种子在线观看| 国产肉丝袜一区二区| 日韩国产精品一区二区| 国产免费av高清在线| 国产午夜三级一区二区三| 免费国产在线精品一区二区三区| 五月婷婷激情在线| 久久久久久久网| 日韩国产在线一区| 8888四色奇米在线观看| 国产精品久久久久一区二区三区共 | 久久婷婷丁香| 国产精品白嫩美女在线观看| 亚洲视屏在线观看| 精品一区二区免费视频| 51国产成人精品午夜福中文下载| 国产女人18毛片18精品| 岛国精品在线观看| 鲁鲁视频www一区二区| 国产1区2区3区在线| 国产精品久久久久9999吃药| 国产又粗又爽又黄的视频| 丝袜综合欧美| 欧美日韩精品中文字幕| 91香蕉视频导航| av成人在线网站| 精品999久久久| 波多野结衣a v在线| 成人一区二区| 欧美日韩福利电影| www亚洲视频| 麻豆精品久久精品色综合| 99国产精品久久久久老师| 天堂a中文在线| 国产精品色一区二区三区| 日本国产中文字幕| 二吊插入一穴一区二区| 91麻豆精品国产无毒不卡在线观看 | 成人免费福利在线| 人妻无码一区二区三区久久99| 久久亚洲综合av| dy888午夜| 厕沟全景美女厕沟精品| 日韩视频123| 最近中文字幕在线mv视频在线| 亚洲一级淫片| 欧美一级淫片播放口| 99精品久久久久久中文字幕| 99精品国产视频| 国产高清精品软男同| 亚洲美女炮图| 日韩免费成人网| 影音先锋制服丝袜| 亚洲欧洲日本mm| 91九色精品视频| 免费看男男www网站入口在线| 亚洲免费看黄网站| 久久久久久久片| 粉嫩一区二区三区四区公司1| 中文字幕在线日韩| 国产综合精品视频| 国产.精品.日韩.另类.中文.在线.播放| 日韩一区二区电影在线观看| av在线小说| 91精品国产一区二区| 国产伦理片在线观看| 国产日韩欧美高清免费| 国产成人亚洲欧美| av片在线观看网站| 欧美乱妇15p| 色噜噜噜噜噜噜| 午夜亚洲视频| 国产偷久久久精品专区| 性欧美高清come| 欧美精品三级在线观看| 日本欧美一区二区三区不卡视频| 亚洲免费激情| 国产在线精品一区| dy888亚洲精品一区二区三区| 欧美视频在线一区| 免费网站在线高清观看| 麻豆精品91| 久久五月天婷婷| 玖玖在线播放| 亚洲国产精品成人av| 久久精品这里只有精品| 国产剧情一区二区| 看一级黄色录像| 伊人亚洲精品| 日韩中文字幕免费| 91亚洲国产成人精品一区| 国产精品女人毛片| 超碰超碰在线观看| 久久视频在线| 成人在线免费观看视视频| 秋霞成人影院| 制服.丝袜.亚洲.另类.中文| 国产精品视频一区二区三| 激情综合色综合久久| 一区二区三区视频在线播放| 久久亚洲精品人成综合网| 国产亚洲欧洲在线| 一级特黄录像免费看| 亚洲天堂成人在线观看| 永久av免费在线观看| 欧美日本一区二区高清播放视频| 99久久一区三区四区免费| 免费看电影在线| 亚洲黄色av女优在线观看 | 狠狠躁夜夜躁人人躁婷婷91| 国产精品无码午夜福利| 日产国产高清一区二区三区| 夜夜爽99久久国产综合精品女不卡| 亚洲人成777| 欧美激情视频在线| 涩涩视频在线观看免费| 欧美在线影院一区二区| 免费在线观看a级片| 成人av在线播放网站| 日本一极黄色片| 欧美激情理论| 国产精品国模大尺度私拍| 中文一区一区三区高中清不卡免费| 亚洲一区二区精品| 精品人妻一区二区三区日产乱码 | 国产免费观看av| 亚洲国产精品精华液ab| 在线观看免费看片| 亚洲自拍另类| 一区二区三区的久久的视频| 91蜜桃臀久久一区二区| 国产91免费观看| 超碰最新在线| 精品视频在线播放色网色视频| 人妻中文字幕一区二区三区| 一区二区三区免费在线观看| 久久丫精品国产亚洲av不卡| 久久精品久久综合| 国产精品12345| 91视频综合| 久久草.com| 高清在线一区二区| 日本一本a高清免费不卡| a毛片在线播放| 国产一区二区三区免费视频| 亚洲国产精品suv| 欧美性猛交一区二区三区精品| 免费网站看av| 国产精品视频yy9299一区| 中文字幕乱码在线| 国产真实乱对白精彩久久| 成人午夜视频免费在线观看| 欧美1区2区| 亚洲成人在线视频网站| 加勒比视频一区| 亚洲va久久久噜噜噜久久天堂| 欧美久久天堂| 欧美韩国理论所午夜片917电影| 成人午夜影视| 精品亚洲va在线va天堂资源站| 国产美女自慰在线观看| 欧美伊人精品成人久久综合97| 激情五月色婷婷| 亚洲老司机在线| 亚洲视频重口味| 国产精品欧美综合在线| 国产一二三四五区| 91色porny在线视频| 成人在线观看一区二区| 紧缚捆绑精品一区二区| 欧美特级aaa| 天堂一区二区在线| 国产肥臀一区二区福利视频| 激情国产一区| 91嫩草国产丨精品入口麻豆| 欧美激情成人| 亚洲一区二区三区免费看| 国产精品欧美在线观看| 蜜桃91精品入口| 五月综合久久| 欧美高清性xxxxhdvideosex| 欧美久久香蕉| 九色91视频| 嫩草国产精品入口| 精品国产一区二区三区日日嗨| 97成人在线| 国产精品国产三级欧美二区| 成午夜精品一区二区三区软件| 91免费综合在线| 精品视频在线观看网站| 91亚洲精品视频| 国产一区二区高清在线| 18成人免费观看网站下载| 欧美成人精品一级| av日韩免费电影| 动漫视频在线一区| 久久av二区| 免费观看久久av| 欧美一区少妇| 日韩欧美网址| 美女黄色片网站| 欧美一区成人| 久久久久久久久久久综合| 91久久视频| 国产精品沙发午睡系列| 石原莉奈一区二区三区在线观看| 熟妇人妻无乱码中文字幕真矢织江| 日韩高清在线电影| 亚洲激情在线看| 国产毛片一区二区| bl动漫在线观看| 久久综合久久综合久久| 少妇一级黄色片| 亚洲激情在线激情| 国产午夜性春猛交ⅹxxx| 在线看日本不卡| 国产精品玖玖玖| 精品久久久久香蕉网| 青青草免费在线| 中文字幕久久亚洲| 色帝国亚洲欧美在线| 欧美在线亚洲在线| 日本精品久久| 国产女人水真多18毛片18精品 | 亚洲不卡在线观看| 国产精品视频一区在线观看| 欧美日韩国产系列| 成人h动漫精品一区二区无码| 日韩电影免费观看在线观看| 91伦理视频在线观看| 欧美理论电影在线观看| 亚洲欧洲自拍| 成人在线中文字幕| 在线看成人短视频| 强开小嫩苞一区二区三区网站| 亚洲国产影院| 亚洲国产精品三区| 成人avav在线| 又嫩又硬又黄又爽的视频| 亚洲一级二级在线| 最新中文字幕免费| 亚洲激情久久久| 国产在线69| 日韩av电影国产| 视频免费一区二区| 亚洲精品日韩在线观看| av成人国产| 亚洲一区二区三区四区精品| 久久久精品国产99久久精品芒果 | www.久久久久| 激情都市亚洲| 国产激情美女久久久久久吹潮| 日韩精品诱惑一区?区三区| 免费拍拍拍网站| 国产毛片精品一区| 99热99这里只有精品| 欧美性高潮床叫视频| www.蜜臀av.com| 日韩视频第一页| 日本一区二区三区视频在线| 精品国产一区二区三区四区精华 | 久久久久se| 欧美视频在线观看| 国产精品嫩草影院8vv8| 欧美激情在线免费观看| 少妇太紧太爽又黄又硬又爽| 精品国产乱码久久久久久1区2区| 欧美日本高清| 国产美女扒开尿口久久久| 自拍偷拍欧美一区| 黄色网页免费在线观看| heyzo一本久久综合| 久久久久久久久99| 日韩欧美一级片| www.欧美日本韩国| 亚洲一区二区三区在线免费观看| 日韩欧美高清| 久久精品影视大全| 国产精品网站导航| 中国a一片一级一片| 国产一区二区三区网站| 国产精品av一区二区三区| 久久国产精品 国产精品| 亚洲精品孕妇| 欧美xxxx×黑人性爽| 亚洲h在线观看| 秋霞网一区二区| 久久久久五月天| 国产区精品视频在线观看豆花| 91午夜在线观看| 成人av免费观看| 国产精品suv一区二区三区| 日韩电影网在线| 不卡av播放| 午夜精品区一区二区三| 久久99精品国产麻豆婷婷洗澡| 国产日产精品一区二区三区的介绍| 欧美日韩在线观看一区二区 | 久久综合久久88| 国产一区二区三区国产精品| 天堂а√在线中文在线| 国产91丝袜在线播放| 日韩 欧美 精品| 亚洲片av在线| 国产91精品在线| 亚洲五码在线观看视频| 成人性视频免费网站| 六月丁香婷婷综合| 这里只有精品在线播放| www.久久草.com| 岛国大片在线播放| 久久久久九九视频| 一级特黄特色的免费大片视频| 超碰91人人草人人干| 国产成人高清精品免费5388| 国产精品50p| 国产无人区一区二区三区| 91尤物国产福利在线观看| 九九综合九九综合| 久久av超碰| 精品国产鲁一鲁一区二区三区| 亚洲综合免费观看高清在线观看| 日本高清视频www| 国产精品av在线播放| 7777久久香蕉成人影院| 丰满大乳奶做爰ⅹxx视频| 欧美三级三级三级|