系统异常处理
创建异常处理器类,类上添加@ControllerAdvice
注解。
package com.soft.exception;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice
public class SysExceptionHandler {
@ExceptionHandler(value = Exception.class)
public ModelAndView handleMyException(Exception e) {
ModelAndView modelAndView = new ModelAndView();
// 错误视图页面
modelAndView.setViewName("500");
// 错误页面的提示信息
modelAndView.addObject("msg", e.getMessage());
return modelAndView;
}
}
控制层方法抛出异常测试:
@RequestMapping("/exp")
public void testException() throws Exception {
throw new Exception("手动抛出自定义异常...");
}
创建错误页面 500.html:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
异常界面信息:<span th:text="${msg}"></span>
</body>
</html>
页面显示为:
页面发生错误处理
首先需要创建一个配置类,实现ErrorPageRegistrar
接口,主要使用到接口里面的一个方法registerErrorPages
。
package com.soft.exception;
import org.springframework.boot.web.server.ErrorPage;
import org.springframework.boot.web.server.ErrorPageRegistrar;
import org.springframework.boot.web.server.ErrorPageRegistry;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
@Configuration
public class ErrorCodePageHandler implements ErrorPageRegistrar {
@Override
public void registerErrorPages(ErrorPageRegistry registry) {
ErrorPage[] errorPages = new ErrorPage[2];
//添加错误页面进行映射
errorPages[0] = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html");
errorPages[1] = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html");
registry.addErrorPages(errorPages);
}
}
在上方的配置类中需要创建一个ErrorPage数组,每个ErrorPage对象包含一个HttpStatus
和一个路径,表示当发生该状态码的错误时,跳转到哪个路径下。
最后需要调用registry.addErrorPages(errorPages)
方法,将错误页面数组注册到错误页面注册器中。
测试:
html文件应该放到静态资源目录下,一般为:src/main/resources/static
,在该目录中创建一个为自定义页面的文件,比如404.html
,显示自定义的错误页面。例如:
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>路径错误</title>
</head>
<body>
路径错啦~
</body>
</html>
当访问路径错误的时候,页面显示为: