1.SpringBoot异常处理方式
2.SpringBoot单元测试
1.SpringBoot异常处理方式
1. 自定义错误页面
捕获所有的异常,全部都跳转到error页面
SpringBoot 默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常SpringBoot 会像/error 的url 发送请求。在springBoot 中提供了一个叫BasicExceptionController 来处理/error 请求,然后跳转到默认显示异常的页面来展示异常信息。
如果我们需要将所有的异常同一跳转到自定义的错误页面, 需要在src/main/resources/templates 目录下创建error.html 页面。注意:名称必须叫error
<!DOCTYPE html>
<meta charset="UTF-8">
<title>错误提示页面</title>
</head>
出错了,请与管理员联系。。。
<span th:text="${exception}"></span>
</body>
</html>
2. @ExceptionHandle 注解处理异常
在某个Controller类中,添加一个方法,返回值为ModelAndView,并加注解@ExceptionHandle(value={异常})来捕获指定一个或多个异常
缺点:只能针对单个控制器类
可以捕获一个or多个异常(value值为一个数组,可以存放一个或多个异常,数组中值为异常类(异常.class))
@ExceptionHandler(value = {java.lang.ArithmeticException.class})
只能对该方法所在的控制器有效,如果有多个控制器,对其他的没有用
可以指定异常后跳转页面,并能携带异常信息
@ExceptionHandler(value = {java.lang.ArithmeticException.class})
public ModelAndView getException(Exception e){
ModelAndView mv = new ModelAndView();
// 往modelandview对象中添加错误信息
mv.addObject("error", e.toString());
// 通过modelandview对象执行跳转页面
mv.setViewName("error1");
return mv;
3. @ControllerAdvice+@ExceptionHandler 注解处理异常
创建一个能够处理异常的全局异常类,在该类上添加@ControllerAdvice注解,并在类中的方法添加@ExceptionHandler注解来捕获指定的异常,正常一个方法对应一个异常
4. 配置SimpleMappingExceptionResolver 处理异常
优点:简化@ControllerAdvice+@ExceptionHandler 注解处理异常方法,通过一个方法,来处理异常
缺点:不能携带异常信息,只能捕获异常,并指定跳转
4.1 编写全局异常类,给类添加@Configration注解
4.2 新建方法,方法返回值为SimpleMappingExceptionResolver
,并加上@Bean注解
4.3 实现该方法
(1)new一个SimpleMappingExceptionResolver对象
(2)编写异常类型与视图的映射(properties参数)
(3)将定义好的映射关系加入到参数中
(3)将参数通过setExceptionMappings方法传递给SimpleMappingExceptionResolver对象中
@Configuration
public class GlobalException {
* 该方法必须要有返回值。返回值类型必须是:
SimpleMappingExceptionResolver
@Bean
public SimpleMappingExceptionResolver
getSimpleMappingExceptionResolver(){
SimpleMappingExceptionResolver resolver = new
SimpleMappingExceptionResolver();
Properties mappings = new Properties();
* 参数一:异常的类型,注意必须是异常类型的全名
* 参数二:视图名称
mappings.put("java.lang.ArithmeticException", "error1");
mappings.put("java.lang.NullPointerException","error2");
//设置异常与视图映射信息的
resolver.setExceptionMappings(mappings);
return resolver;
5. 自定义HandlerExceptionResolver 类处理异常
优化第四种异常处理方法,使其可以携带异常信息
5.1 通过实现HandlerExceptionResolver 接口做全局异常处理
5.2 在实现类上添加@Configuration注解
5.3 重写resolveException方法
(1)new一个ModelAndView对象
(2)判断不同的异常信息,做不同视图跳转
(3)返回modelandview对象
@Configuration
public class GlobalException implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView mv = new ModelAndView();
// 判断不同异常类型,做不同视图跳转
if(e instanceof ArithmeticException){
mv.setViewName("error1");
if (e instanceof NullPointerException){
mv.setViewName("error2");
// 添加错误信息到modelandview对象中
mv.addObject("error", e.toString());
return mv;
2.SpringBoot单元测试
配置pom文件
编写测试类
配置pom文件
<!-- 添加junit环境的jar包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
编写测试类
在src/test/java/com.xxx.test下
2.1 @RunWith:启动器
2.2 @SpringBootTest(classes={App.class})
2.3 @Test
@RunWith:启动器
SpringJUnit4ClassRunner.class:让junit 与spring 环境进行整合
@SpringBootTest(classes={App.class})
1,当前类为springBoot 的测试类
2,加载SpringBoot 启动类。启动springBoot
@Test
给测试方法上加该注解
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = {App.class})
public class UserServiceTest {
@Autowired
private UserServceImpl userServceImpl;
@Test