SpringBoot(七) SpringBoot 中异常处理与单元测试

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();
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

plenilune-望月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值