項目中,可能會拋出多個異常,我們不可以直接將異常的堆棧信息展示給用戶,有兩個原因:
- 用戶體驗不好
- 非常不安全
所以,針對異常,我們可以自定義異常處理,SpringMVC 中,針對全局異常也提供了相應的解決方案,主要是通過 @ControllerAdvice 和@ExceptionHandler 兩個注解來處理的。
以上傳大小超出限制為例,自定義異常,只需要提供一個異常處理類即可:
1
2
3
4
5
6
7
8
9
|
@ControllerAdvice //表示這是一個增強版的 Controller,主要用來做全局數據處理 public class MyException { @ExceptionHandler (Exception. class ) public ModelAndView fileuploadException(Exception e) { ModelAndView error = new ModelAndView( "error" ); error.addObject( "error" , e.getMessage()); return error; } } |
在這里:
- @ControllerAdvice 表示這是一個增強版的 Controller,主要用來做全局數據處理
- @ExceptionHandler 表示這是一個異常處理方法,這個注解的參數,表示需要攔截的異常,參數為 Exception 表示攔截所有異常,這里也可以具體到某一個異常,如果具體到某一個異常,那么發生了其他異常則不會被攔截到。
- 異常方法的定義,和 Controller 中方法的定義一樣,可以返回 ModelAndview,也可以返回 String 或者 void
例如如下代碼,指揮攔截文件上傳異常,其他異常和它沒關系,不會進入到自定義異常處理的方法中來。
1
2
3
4
5
6
7
8
9
|
@ControllerAdvice //表示這是一個增強版的 Controller,主要用來做全局數據處理 public class MyException { @ExceptionHandler (MaxUploadSizeExceededException. class ) public ModelAndView fileuploadException(MaxUploadSizeExceededException e) { ModelAndView error = new ModelAndView( "error" ); error.addObject( "error" , e.getMessage()); return error; } } |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.cnblogs.com/qiuwenli/p/13423990.html