springmvc異常處理

原文鏈接https://zhhll.com.cn/2021/%E6%A1%86%E6%9E%B6/springmvc/springmvc%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86/

springmvc異常處理

springmvc通過HandlerExceptionResolver來處理程序的異常

一般情況下使用@ExceptionHandler注解來進行標注異常處理

ExceptionHandlerExceptionResolver異常處理

  • 如果出現(xiàn)異常,先是查找該Controller中用@ExceptionHandler注解定義的方法
  • 如果沒有找到@ExceptionHandler注解的話,就會尋找標記了@ControllerAdvice注解的類中的@ExceptionHandler注解方法

局部異常處理

在當前Controller中處理異常(當前Controller中使用@ExceptionHandler標注的方法)

@Controller
@RequestMapping("/exception")
public class ExceptionController {

  /**
  * 在@Controller中所寫的@ExceptionHandler方法只能處理該Controller類中出現(xiàn)的異常,不可以處理其他Controller中出現(xiàn)的異常,此為局部異常處理
  */
    @ExceptionHandler
    @ResponseBody
    public String exception(Exception e){
        return "出現(xiàn)異常"+e.getMessage();
    }

    @RequestMapping("/testException")
    @ResponseBody
    public String testException(){
        User user = null;
        System.out.println(user.getId());
        return "success";
    }
}

全局異常處理

如果當前Controller中沒有異常處理,則會使用全局異常(使用@ControllerAdvice標注的類中的@ExceptionHandler方法)

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler
    @ResponseBody
    public String exception(Exception e){
        return "全局捕獲: 出現(xiàn)異常"+e.getMessage();
    }
}

ResponseStatusExceptionResolver異常處理

該異常處理機制是來解析@ResponseStatus來標注的異常

自定義異常

// code指定的是狀態(tài)碼,reason指定的是錯誤信息
@ResponseStatus(code = HttpStatus.BAD_REQUEST,reason = "出現(xiàn)業(yè)務(wù)異常")
public class BusinessException extends RuntimeException{

}
@RequestMapping("/testBusinessException")
@ResponseBody
public String testBusinessException(){
    throw new BusinessException();
}

調(diào)用該接口就會返回到狀態(tài)碼為400的錯誤頁面

由于本身的博客百度沒有收錄,博客地址https://zhhll.com.cn

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容