springboot中对于异常处理提供了五种处理方式

springboot中对于异常处理提供了五种处理方式
springboot默认处理异常的机制

1,自定义错误页面

springboot默认的已经
提供了一套处理异常机制,一旦程序出现了异常,springboot会
向/error的url发送请求,在springboot提供了一个
类BasicExceptionController来处理/error请求
然后舔砖到迷人现实异常的页面展示异常信息

如果我们需要将所有的异常统一跳到自定义的错误页面,需要
在src/resources/templates目录下创建error.html,注意:名称必须叫error
 

<span th:text="${exception}"></span>

 

2,@ExceptionHandler注解处理

比较局部,只能捕获当前类的异常

/**
	 * java.lang.ArithmeticException
	 * @return 返回ModelAndView,封装异常信息和指定视图
	 */
	@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;
	}
	
	/**
	 * java.lang.NullPointerException
	 * @return 返回ModelAndView,封装异常信息和指定视图
	 */
	@ExceptionHandler(value = {java.lang.NullPointerException.class})
	public ModelAndView nullPointerExceptionHandler(Exception e) {
		ModelAndView mv=new ModelAndView();
		mv.addObject("error", e.toString());
		mv.setViewName("error2");
		return mv;
	}

 

3,@ControllerAdvice+@ExceptionHandler注解处理异常

需创建一个能够处理异常的全局异常类,在类上需要添加@ControllerAdvice

package com.ljw.exception;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

@ControllerAdvice
public class GlobleException {

	/**
	 * java.lang.ArithmeticException
	 * @return 返回ModelAndView,封装异常信息和指定视图
	 */
	@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;
	}
	
	/**
	 * java.lang.NullPointerException
	 * @return 返回ModelAndView,封装异常信息和指定视图
	 */
	@ExceptionHandler(value = {java.lang.NullPointerException.class})
	public ModelAndView nullPointerExceptionHandler(Exception e) {
		ModelAndView mv=new ModelAndView();
		mv.addObject("error", e.toString());
		mv.setViewName("error2");
		return mv;
	}
}

4,配置SimpleMappingExceptionResolver处理异常

 

5,自定义HandlerExceptionResolver类处理异常

需要在全局异常处理中实现HandlerExceptionResolver接口

package com.ljw.exception;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

@Configuration
public class GlobleException 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;
	}

	
}
发布了25 篇原创文章 · 获赞 0 · 访问量 491

猜你喜欢

转载自blog.csdn.net/luojiawen208/article/details/105102120