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;
}
}