Spring|Spring Boot异常处理与单元测试
1.SpringBoot异常处理方式
2.SpringBoot单元测试
1.SpringBoot异常处理方式
- 自定义错误页面
- @ExceptionHandle 注解处理异常
- @ControllerAdvice+@ExceptionHandler 注解处理异常
- 配置SimpleMappingExceptionResolver 处理异常
- 自定义HandlerExceptionResolver 类处理异常
1. 自定义错误页面
捕获所有的异常,全部都跳转到error页面
SpringBoot 默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常SpringBoot 会像/error 的url 发送请求。在springBoot 中提供了一个叫BasicExceptionController 来处理/error 请求,然后跳转到默认显示异常的页面来展示异常信息。如果我们需要将所有的异常同一跳转到自定义的错误页面, 需要在src/main/resources/templates 目录下创建error.html 页面。注意:名称必须叫error
- 在页面中可以通过th:text="${exception}"获取错误信息
错误提示页面 - 锐客网
出错了,请与管理员联系。。。
2. @ExceptionHandle 注解处理异常
【Spring|Spring Boot异常处理与单元测试】在某个Controller类中,添加一个方法,返回值为ModelAndView,并加注解@ExceptionHandle(value=https://www.it610.com/article/{异常})来捕获指定一个或多个异常
缺点:只能针对单个控制器类
- 可以捕获一个or多个异常(value值为一个数组,可以存放一个或多个异常,数组中值为异常类(异常.class))
@ExceptionHandler(value = https://www.it610.com/article/{java.lang.ArithmeticException.class})
- 只能对该方法所在的控制器有效,如果有多个控制器,对其他的没有用
- 可以指定异常后跳转页面,并能携带异常信息
@ExceptionHandler(value = https://www.it610.com/article/{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文件
org.springframework.boot
spring-boot-starter-test
- 编写测试类
在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
public void testAddUser(){
this.userServceImpl.addUser();
}
}
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 2018-07-09|2018-07-09 Spring 的DBCP,c3p0
- python-安装sublime遇到异常
- Android|Android BLE蓝牙连接异常处理
- spring|spring boot项目启动websocket
- Spring|Spring Boot 整合 Activiti6.0.0
- Spring集成|Spring集成 Mina
- springboot使用redis缓存