springboot 五种异常处理方式
2021-01-22 06:12
标签:html tle img and 对象 dtd 自动跳转 ram 跳转 springboot已经内嵌了异常处理的机制,如果发生错误会自动跳转到error界面,默认的error界面为: 我们可以自定义异常界面,但是需要在 src/main/resources/templates 目录下创建 error.html 页面 contorller: error1.html: error2: GlobalException: error3.html: springboot 五种异常处理方式 标签:html tle img and 对象 dtd 自动跳转 ram 跳转 原文地址:https://www.cnblogs.com/activestruggle/p/12891694.html1.自定义错误页面:
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
html xmlns:th="http://www.thymeleaf.org">
head>
title>Titletitle>
head>
body>
span th:text="${message}">span>
body>
html>
优点:
springboot自带的一场机制,无需自己配置
缺点:
所有的异常信息都在同一个界面
2.在controller类中通过 @ExceptionHandler 注解来新建方法
@Controller
public class UsersController {
@RequestMapping("showInfo")
public String showIno() {
String str = null;
str.length();
return "OK";
}
@RequestMapping("showInfo2")
public String showIno2() {
int a = 10 / 0;
return "OK";
}
//value 是一个数组,可以添加多个异常,但只能指向同一个异常页面
@ExceptionHandler(value = {java.lang.NullPointerException.class})
public ModelAndView nullPointExceptionHandler(Exception e) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("error", e.toString());
modelAndView.setViewName("error1");
return modelAndView;
}
@ExceptionHandler(value = {java.lang.ArithmeticException.class})
public ModelAndView ArithmeticExceptionHandler(ArithmeticException e) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("error", e.toString());
modelAndView.setViewName("error2");
return modelAndView;
}DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
html xmlns:th="http://www.thymeleaf.org">
head>
title>Titletitle>
head>
body>
空指针异常
span th:text="${error}">span>
body>
html>
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
html xmlns:th="http://www.thymeleaf.org">
head>
title>Titletitle>
head>
body>
span th:text="${error}">span>
body>
html>
优点:
可以指向多个异常页面
缺点:
只能在一个controller类中起作用,代码重用性低
一个异常方法对应一个异常页面,当异常页面过多时会导致异常冗余
3.创建一个全局异常类 GlobalException ,通过@ControllerAdvice注解和@ExceptionHandler注解实现全局配置
/*
* 全局异常处理类
* */
@ControllerAdvice
public class GlobalException {
@ExceptionHandler(value = {java.lang.NullPointerException.class})
public ModelAndView nullPointExceptionHandler(Exception e) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("error", e.toString());
modelAndView.setViewName("error1");
return modelAndView;
}
@ExceptionHandler(value = {java.lang.ArithmeticException.class})
public ModelAndView ArithmeticExceptionHandler(ArithmeticException e) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("error", e.toString());
modelAndView.setViewName("error2");
return modelAndView;
}
}
优点:
可以指向多个异常页面
全局配置,代码重用性高
缺点:
一个异常方法对应一个异常页面,当异常页面过多时会导致异常冗余
4.配置 SimpleMappingExceptionResolver 处理异常
/*
* 全局异常
* */
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import java.util.Properties;
@Configuration
public class GlobalException2 {
/*
* 此方法返回值必须是SimpleMappingExceptionResolver类型
* */
@Bean
public SimpleMappingExceptionResolver getSimpleMappingExceptionResolver() {
SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
Properties properties = new Properties();
/*
*参数一:异常类型,并且是全名
* 参数二:视图名称
* */
properties.put("java.lang.NullPointerException", "error3");
properties.put("java.lang.ArithmeticException", "error4");
resolver.setExceptionMappings(properties);
return resolver;
}
}
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
html xmlns:th="http://www.thymeleaf.org">
head>
title>Titletitle>
head>
body>
java.lang.NullPointerException
body>
html>
优点:
可以指向多个异常页面
全局配置,代码重用性高
一个异常方法对应一个异常页面,当异常页面过多时会导致异常冗余
缺点:
只能做视图和异常的映射,不能做异常信息的传递,将导致异常信息比较模糊
5.自定义 HandlerExceptionResolver 类处理异常
/*
* 自定义HandlerExceptionResolver对象处理异常
* 必须实现HandlerExceptionResolver接口
* */
@Configuration
public class GlobalException3 implements HandlerExceptionResolver {
/*
* httpServletRequest产生异常的请求对象
* httpServletResponse产生异常的响应对象
* handler此次产生异常的handler对象
* e 产生异常的异常对象
* */
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler, Exception e) {
ModelAndView mv = new ModelAndView();
//判断不同异常类型,做不同视图跳转
if (e instanceof NullPointerException) {
mv.setViewName("error5");
}
if(e instanceof ArithmeticException){
mv.setViewName("error6");
}
mv.addObject("error",e.toString());
return mv;
}
}
优点:
可以指向多个异常页面
全局配置,代码重用性高
一个异常方法对应一个异常页面,当异常页面过多时会导致异常冗余
异常信息详细
文章标题:springboot 五种异常处理方式
文章链接:http://soscw.com/index.php/essay/45313.html