SpringBoot如何自定义一个错误页导向
1、定义一个错误类,这个错误类继承自RuntimeException,而这个类的主要作用就是让我们能够进入异常的处理。
public class MyException extends RuntimeException {
//这里输出主要是为了判断能否调用这个异常,可不加
public MyException() {
System.out.println("用户不存在");
}
}
2、自己让程序主动去抛一个异常
@Controller
public class MyController {
@ResponseBody
@RequestMapping("/login")
public Object getShe(@RequestParam("user") String user){
if("sss".equals(user)){
throw new MyException();
}
return "Hello MyFriends";
}
}
3、在这里看一下这个错误页面的位置,是放在error文件下的,可以取名为404,4xx,5xx,等等,默认匹配最合适的,不然就按名字匹配有xx的。
4、这个5xx.html是这样的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
欢迎来到5xx
<div>
<h1>status:[[${status}]]</h1>
<h2>timestamp:[[${timestamp}]]</h2>
<h2>exception:[[${exception}]]</h2>
<h2>message:[[${message}]]</h2>
<h2>ext:[[${map.code}]]</h2>
<h2>ext:[[${map.mess}]]</h2>
</div>
</body>
</html>
注意一下记得导一下那个thymeleaf依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
5、自己定义错误返回的东西
@ControllerAdvice
public class MyExceptionController {
@ExceptionHandler(MyException.class)
public Object getSb(Exception e,HttpServletRequest request){
Map<String, String> stringStringMap = new HashMap<>();
//这里必须要注明错误码不然下面无法进入那个错误页面
request.setAttribute("javax.servlet.error.status_code",500);
stringStringMap.put("mess","用户名出错啦");
stringStringMap.put("code","神秘数字666");
//这里主要判断能否调用这个方法,可不打印
System.out.println("进来的自定义的方法");
request.setAttribute("map",stringStringMap);
//这里会选择这个error文件夹下面的对应错误码页面,文件夹要写成error才可以
return "forward:/error";
}
}
6、测试运行
ps:这里的异常原本是可以出现的,不知道是不是缓存问题,没有出现,不过主要的自定义属性功能已经可以做到了。