spring mvc 利用@ExceptionHandler进行全局异常处理

在完成spring mvc 项目过程中 异常是一个不可避免的需要处理的重点
例如:
1):用户正在访问我们的网站,数据库服务器挂掉了,这时候肯定会产生在调用数据库过程中连接所产生的异常
2):后端程序员的一个失误没有考虑到某些特定情况下产生null数据而引发的空指针异常
那怎么解决这个问题呢?

方案1:

try {
			msg=userService.addUser(user);
		}catch (ValidatorException e) {
			return new JsonResult(ResultCode.VALIDATE_ERR,e.getMessage());
		}
		catch (Exception e) {
			return new JsonResult(ResultCode.EXCEPTION);
		}

利用try…catch…机制手工抓取到异常,并且对异常进行处理,将异常信息返回到前端,让前端工程师提示用户:系统当前可能产生了异常

方案2:
方案1处理是可以处理的,但如果代码多了就很麻烦,每个里边都try…catch…虽然很规范,但是写多了容易掉头发

最简单的解决方案:
spring 为解决这个问题呢,首先给我们提供了一个非常棒的注解:@ControllerAdvice
这个注解的作用主要是:监控所有的@RequestMapping,在它们身上所发生的异常都会被捕获,上代码:

@RestControllerAdvice //因为都是json格式返回给前端,所以用这个东西
public class ControllerExceptionAdvice {
	
    @ResponseBody
	@ExceptionHandler(java.lang.Exception.class)
	public JsonResult handleEXCEPTION(){
		return new JsonResult(ResultCode.EXCEPTION, ResultCode.EXCEPTION.msg());
	}

重点是这句话:@ExceptionHandler(java.lang.Exception.class)
java.lang.Exception.class 所有该情形下的异常就会交由我们规定好的handleEXCEPTION这个方法处理了

最后上controller的代码

@RequestMapping(value="/sayHello11/{name}",method=RequestMethod.GET)
	public String sayHello11(@PathVariable("name")String name) throws Exception{
		int i=1;
		if("xinlanzhu".equals(name)){
			 i=1/0;
		}
		
		return "hello boot"+name+" "+i;
	}

这个位置就不需要辛苦的去try…catch…了,我们直接抛出,当产生异常的时候,自动会捕捉异常并进入我们写的@ExceptionHandler里边去自动处理了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值