1 异常处理
SpringBoot 中对于异常处理提供了五种处理方式
1.1 自定义错误页面
SpringBoot默认的处理异常的机制:SpringBoot默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 SpringBoot 中提供了一个名为 BasicErrorController 来处理/error 请求,然后跳转到默认显示异常的页面来展示异常信息。
如 果 我 们 需 要 将 所 有 的 异 常 同 一 跳 转 到 自 定 义 的 错 误 页 面 , 需 要 再src/main/resources/templates 目录下创建 error.html 页面。注意:页面名称必须叫 error
1.2 通过@ExceptionHandler 注解处理异常
1.2.1 修改 Controller
@Controller
public class UsersController {
@RequestMapping("showInfo")
public String showInfo(){
String str = null;
str.length();
return "ok";
}
@ExceptionHandler(value = {java.lang.NullPointerException.class} )
public ModelAndView nullpointExcepitonHandler(Exception e){
ModelAndView mv = new ModelAndView();
mv.addObject("err",e.toString());
mv.setViewName("error1");
return mv;
}
}
1.2.2 创建页面
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>北京尚学堂首页</title>
</head>
<body>
出错了。。。
<span th:text="${err}"/>
</body>
</html>
1.3 通过@ControllerAdvice 与@ExceptionHandler 注解处理异常
1.3.1 创建全局异常处理类
/**
* 全局异常处理类
*/
@ControllerAdvice
public class GlobalException {
@ExceptionHandler(value ={java.lang.NullPointerException.class} )
public ModelAndView nullpointExcepitonHandler(Exception e){
ModelAndView mv = new ModelAndView();
mv.addObject("err",e.toString());
mv.setViewName("error1");
return mv;
}
@ExceptionHandler(value = {java.lang.ArithmeticException.class} )
public ModelAndView arithmeticExceptionHandler(Exception e){
ModelAndView mv = new ModelAndView();
mv.addObject("err",e.toString());
mv.setViewName("error2");
return mv;
}
}
1.4 通过 SimpleMappingExceptionResolver 对象处理异常
1.4.1 创建全局异常处理类
/**
* 全局异常
* SimpleMappingExceptionResolver
*/
@Configuration
public class GlobalException2 {
/**
* 此方法返回值必须是 SimpleMappingExceptionResolver 对象
* @return
*/
@Bean
public SimpleMappingExceptionResolver
getSimpleMappingExceptionResolver(){
SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
Properties properties = new Properties();
/**
* 参数一:异常类型,并且是全名
* 参数二:视图名称
*/
properties.put("java.lang.NullPointerException","error3");
properties.put("java.lang.ArithmeticException","error4");
resolver.setExceptionMappings(properties);
return resolver;
}
}
1.5 通过自定义 HandlerExceptionResolver 对象处理异常
1.5.1 创建全局异常处理类
/**
* 自定义 HandlerExceptionResolver 对象处理异常
* 必须要实现 HandlerExceptionResolver
*/
@Configuration
public class GlobalException3 implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest
httpServletRequest, HttpServletResponse
httpServletResponse, Object handler, Exception e) {
ModelAndView mv = new ModelAndView();
// 判断不同异常类型,做不同视图的跳转
if(e instanceof NullPointerException){
mv.setViewName("error5");
}
if(e instanceof ArithmeticException){
mv.setViewName("error6");
}
mv.addObject("error",e.toString());
return mv;
}
}
2 Spring Boot 整合 Junit 单元测试
SpringBoot2.x 使用 Junit5 作为测试平台
2.1 修改 POM 文件添加 Test 启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<!--junit-vintage-engine 提供了 Junit3 与 Junit4 的运行平台 -->
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
2.2 编写测试代码
@SpringBootTest
class SpringbootexcepionandjunitApplicationTests {
@Autowired
private UsersServiceImpl usersService;
@Test
void suibian() {
this.usersService.addUser();
}
}