Springboot異常處理


一.自定義錯誤頁面

SpringBoot 默認的處理異常的機制:SpringBoot 默認的已經提供了一套處理異常的機制。一旦程序中出現了異常 SpringBoot 會向/error 的 url 發送請求。在 springBoot 中提供了一個叫BasicExceptionController 來處理/error 請求,然后跳轉到默認顯示異常的頁面來展示異常信息。

所以我們可以自定義一個名字為error的HTML頁面,自己設置,異常可通過${exception}來取。

二.@ControllerAdvice+@ExceptionHandler 注解處理異常(全局處理)

需要創建一個能夠處理異常的全局異常類;

在該類上需要添加@ControllerAdvice 注解;

方法前需要添加@ExceptionHandler 注解,並設置參數value,值為對應異常類;

該方法需要返回ModelAndView,目的是可以讓我們封裝異常信息以及視圖的指定

例:

@ControllerAdvice
public class GlobalException {
	/**
	 * 參數 Exception e:會將產生異常對象注入到方法中
	 */
	@ExceptionHandler(value = { java.lang.ArithmeticException.class })
	public ModelAndView arithmeticExceptionHandler(Exception e) {
		ModelAndView mv = new ModelAndView();
		mv.addObject("error", e.toString());
		mv.setViewName("error1");
		return mv;
	}
}  

三.配置SimpleMappingExceptionResolver處理異常

這種方式是對第二種的簡化,但也有所區別,就是如果不需傳遞異常信息只是跳轉頁面,第三種會比較好,如果需傳遞相應異常的異常信息,我們就要選擇第二種了。

 

@Configuration
public class GlobalException {
	/**
	 * 該方法必須要有返回值。返回值類型必須是: SimpleMappingExceptionResolver
	 */
	@Bean
	public SimpleMappingExceptionResolver getSimpleMappingExceptionResolver() {
		SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
		Properties mappings = new Properties();
		/**
		 * 參數一:異常的類型,注意必須是異常類型的全名 參數二:視圖名稱
		 */
		mappings.put("java.lang.ArithmeticException", "error1");
		mappings.put("java.lang.NullPointerException", "error2");
		// 設置異常與視圖映射信息的
		resolver.setExceptionMappings(mappings);
		return resolver;
	}
}

 四.自定義 HandlerExceptionResolver 類處理異常

這種方式相比於第二種和第三種,既簡化了代碼,也可實現異常信息的傳遞和視圖的指定

需要在全局異常處理類中實現HandlerExceptionResolver 接口

@Configuration
public class GlobalException implements HandlerExceptionResolver {
	@Override
	public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
			Exception ex) {
		ModelAndView mv = new ModelAndView();
		// 判斷不同異常類型,做不同視圖跳轉
		if (ex instanceof ArithmeticException) {
			mv.setViewName("error1");
		}
		if (ex instanceof NullPointerException) {
			mv.setViewName("error2");
		}
		mv.addObject("error", ex.toString());
		return mv;
	}
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM