我们可以单独创建一个类,通过使用@ControllerAdvice和@ExceptionHandler一起使用,当所有控制器的方法出现问题,都进入异常处理方法。具体使用如下:
该方法的缺点是:异常处理类中需要处理的异常越多,方法就越多,造成代码的冗余
Table of Contents
1:创建GloableException类,用于定义出现各种异常跳转页面:
1:创建GloableException类,用于定义出现各种异常跳转页面:
2.异常处理类代码:
package com.bjsxt.springbooterr.exception;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice
public class GloableHandler {
//当该项目的控制器方法出现了空指针异常,便会进入该类的该方法
//该注解的作用是根据不同的异常跳转到不同的试图
@ExceptionHandler(value = {java.lang.NullPointerException.class})
public ModelAndView nullpointException(Exception e){
ModelAndView mv=new ModelAndView();
//将异常信息添加到ModelAndView中
mv.addObject("error1",e.toString());
//出现异常跳转到名为error1的视图
mv.setViewName("error1");
return mv;
}
//当控制器的方法出现算数异常时进入该方法
//该注解的作用是根据不同的异常跳转到不同的试图
@ExceptionHandler(value = {java.lang.ArithmeticException.class})
public ModelAndView arithmeticException(Exception e){
ModelAndView mv=new ModelAndView();
//将异常信息添加到ModelAndView中
mv.addObject("error2",e.toString());
//出现异常跳转到名为error1的视图
mv.setViewName("error2");
return mv;
}
}
3:控制器代码:
package com.bjsxt.springbooterr.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class UserController {
//空指针异常
@RequestMapping("/pagejump")
public String pageJump(){
String str=null;
str.length();
return "ok";
}
//算术异常
@RequestMapping("/pagejump1")
public String pageJump1(){
int i=3/0;
return "ok";
}
}
4.error2页面代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
算数异常:
<span th:text="${error2}"></span>
</body>
</html>