系统异常处理
创建异常处理器类,类上添加@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 {@Overridepublic 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>
当访问路径错误的时候,页面显示为: