真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringMVC中怎么實(shí)現(xiàn)異常處理

SpringMVC中怎么實(shí)現(xiàn)異常處理,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

創(chuàng)新互聯(lián)建站是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅(jiān)持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過去的十載時(shí)間我們累計(jì)服務(wù)了上千家以及全國政企客戶,如成都搬家公司等企業(yè)單位,完善的項(xiàng)目管理流程,嚴(yán)格把控項(xiàng)目進(jìn)度與質(zhì)量監(jiān)控加上過硬的技術(shù)實(shí)力獲得客戶的一致稱贊。

@ExceptionHandler、@controlleradvice、HandlerExceptionResolver、ResponseEntityExceptionHandler、ErrorController

    1.@ExceptionHandler注解

用于同一個(gè) Controller 類下面方法異常捕獲,先看@ExceptionHandler源碼:

//該注解作用對(duì)象為方法
@Target({ElementType.METHOD})
//在運(yùn)行時(shí)有效
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExceptionHandler {
    //value()可以指定異常類
    Class[] value() default {};
}

異常參數(shù)可以包括一般的異?;蜃远x異常,如果注解沒有指定異常類,會(huì)默認(rèn)進(jìn)行映射。

@Controller
public class XttblogController {
    
    //自定義異常處理的方法
    @ExceptionHandler({Exception.class})
    public void exception(Exception e) {
        system.out.println("發(fā)生了異常")
    }

    //業(yè)務(wù)方法
    @RequestMapping("test")
    public void test() {
        throw new NullPointerException();
    }
}

當(dāng)業(yè)務(wù)方法發(fā)生異常時(shí),會(huì)自動(dòng)捕獲該異常并調(diào)用該類中的異常處理方法。

    2. @controlleradvice注解

@controlleradvice 注解適用于捕獲全局異常,通過@controlleradvice加上@ExceptionHandler可以定義全局異常處理方法。官方也推薦用這種方式處理統(tǒng)一全局異常。

@ControllerAdvice
public class MyExceptionHandler extends ResponseEntityExceptionHandler{

    @ExceptionHandler(BusinessException.class)
    @ResponseBody
    public resultType businessExceptionHandler(BusinessException e){
        ....
        return resultType;
    }
    
    @ExceptionHandler(NullPointException.class)
    @ResponseBody
    public resultType exceptionHandler(Exception e){
       ....
       return resultType;
    }
}

通過這樣可以掌控全局異常,當(dāng)業(yè)務(wù)處理發(fā)生異常時(shí),會(huì)自動(dòng)捕獲并調(diào)用相應(yīng)的異常處理方法。建議繼承ResponseEntityExceptionHandler來處理,該父類包括了很多已經(jīng)被@ExceptionHandler注解標(biāo)識(shí)的方法。另外,如果統(tǒng)一異常處理都需要返回json,那么可以使用@RestControllerAdvice注解來代替@ControllerAdvice,這樣就可不需要添加@ResponseBody。

    3.HandlerExceptionResolver接口

HandlerExceptionResolver是Spring提供的一個(gè)接口。它也可以用來處理全局異常。異常處理類需要實(shí)現(xiàn)該接口,并作為組件@Component交給Spring管理

@Component
public class ExceptionResolver implements HandlerExceptionResolver{
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        var mv = new ModelAndView();
        mv.addObject("message","哎呀,一不小心出錯(cuò)了呀!");
        mv.setViewName("message");
        return mv;
    }
}

HandlerExceptionResolve 雖然能夠處理全局異常,但是 Spring 官方不推薦使用它。

    4.ErrorController

ErrorController是一個(gè)接口,@controlleradvice只能處理進(jìn)入@Controller標(biāo)識(shí)后產(chǎn)生的異常,有時(shí)例如URL地址錯(cuò)誤這種異常處理,就需要異常處理類實(shí)現(xiàn) ErrorController來處理。

@Controller
public class InterfaceErrorController implements ErrorController {
    
    @Override
    public String getErrorPath() {
        return "/error";
    }
 
    /**
     * 處理來自web頁面的錯(cuò)誤
     */
    @RequestMapping(value=“/error”,produces="text/html")
    @ResponseBody
    public resultType errorPageHandler(HttpServletRequest request,HttpServletResponse response) {
        return resultType;
    }
 
    /**
     * 處理除web頁面外的錯(cuò)誤處理,比如json/xml等
     */
    @RequestMapping(value="/error")
    @ResponseBody
    public resultType errorApiHander(HttpServletRequest request) {
        return resultType;
    }
}

看完上述內(nèi)容,你們掌握SpringMVC中怎么實(shí)現(xiàn)異常處理的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


網(wǎng)站題目:SpringMVC中怎么實(shí)現(xiàn)異常處理
文章網(wǎng)址:http://weahome.cn/article/jjpici.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部