SringBoot异常处理与单元测试
1、异常处理方式
1.1自定义错误页面
SpringBoot默认的处理异常的机制:一旦程序出现了异常,SpringBoot会/error的URL发送请求。在SpringBoot中提供了一个BasicExceptionController处理/error请求,会跳转到默认的异常页面。
若自定义一个错误页面。命名为error在src/main/resource/templates/error.html
只要遇到异常就会跳转到这个页面。
1.2@ExceptionHandle注解处理异常
@ExceptionHandle(value={异常类型.class})
方法返回值为ModelAndView,目的是为了封装异常信息和视图的指定
方法参数为Exception e 目的是将产生异常对象注入到方法中
1.3@ControllerAdvice+@ExceptionHandle注解处理异常
创建一个专门处理异常的Controller(全局异常类),添加@ControllerAdvice注解。在该 Controller中定义处理异常的方法。
这样也可以处理其他Controller的异常。
1.4配置SimpleMappingExceptionResolver处理异常
/**
*
* @author 24957
*
*全局异常处理
*
*/
@Configuration
public class Exception {
/**
* 该方法返回值类型必须为SimpleMappingExceptionResolver
* @return
*/
@Bean
public SimpleMappingExceptionResolver getResolver() {
SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
Properties properties = new Properties();
/**
* 参数一:异常类型,全称
* 参数二:视图名称
*/
properties.put("java.lang.ArithmeticException", "error1");
properties.put("java.lang.NullPointerException", "error2");
/**
* 设置异常与视图映射信息
*/
resolver.setExceptionMappings(properties);
return resolver;
}
}
1.5自定义HandleExceptionResolver处理异常
/**
* 通过实现HandleExceptionResolver接口处理全局异常
* @author 24957
*
*/
@Configuration
public class Exception2 implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
java.lang.Exception ex) {
// TODO Auto-generated method stub
ModelAndView mv = new ModelAndView();
//判断不同异常类型
if(ex instanceof ArithmeticException) {
mv.setViewName("error1");
}
if(ex instanceof NullPointerException) {
mv.setViewName("error2");
}
mv.addObject("error", ex.toString());
return mv;
}
}
2、整合Junit单元测试
/**
* 测试类
*
* @RunWith(SpringJUnit4ClassRunner.class) 启动器
* @SpringBootTest(classes= {App.class})
* 当前类为测试类,并且启动app启动类
*
* @author 24957
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes= {App.class})
public class TestUsers {
@Autowired
private UsersServiceImpl userServiceImpl;
@Test
public void testAddUsers() {
userServiceImpl.adduser();
}
}