SpringMVC学习之异常处理

本文详细介绍了在SpringMVC框架中如何通过自定义异常类、编写异常处理器类及配置异常处理器来优雅地处理异常,避免将异常直接抛给客户端,提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题的引入:当sevice层或者dao层出现异常,dao层会抛给service层,service层会抛给controller层,controller会抛给前端控制器,前端控制器会直接抛给客户端,为了避免这样的情况发生,需要在前端控制器上对异常进行处理。
处理的步骤:1.自定义异常类。2.编写异常处理器类。3.配置异常处理器
首先来看看不处理异常会是什么效果

controller方法:

@Controller
@RequestMapping("/exception")
public class ExceptionDemo {
	
	@RequestMapping("/test")
	public String test() throws SysException{	
		System.out.println("exceptiontest方法执行");
		//模拟异常
			int a=4/0;
		return "success";
	}
}

jsp代码:

<a href="exception/test">异常处理</a><br>

浏览器报错:
在这里插入图片描述
这样的效果是非常不友好的
1.首先编写自定义异常:
自定义异常,需要继承Exception

/*
 * 异常处理
 * 1.自定义异常类
 * 2.编写异常处理器类
 * 3.配置异常处理器
 */
public class SysException extends Exception{
	private static final long serialVersionUID = 1L;
	//存储提示信息
	private String message;
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	public SysException(String message) {//构造器
		this.message = message;
	}
}

2.编写异常处理器:
需要实现HandlerExceptionResolver接口,此接口中有一个resolveException方法,返回值类型为ModelAndView

public class SysExceptionResovler implements HandlerExceptionResolver{
	/*
	 * 当controller有异常抛过来
	 */
	public ModelAndView resolveException(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2,Exception arg3) {
		//获取异常对象
		SysException e=null;//用来接收异常
		if(arg3 instanceof SysException){
			e=(SysException)arg3;//强制转换
		}
		else{
			e=new SysException("系统正在维护");//自定义异常编写了构造器
		}
		//创建对象
		ModelAndView mav=new ModelAndView();
		mav.addObject("errorMsg", e.getMessage());
		mav.setViewName("error");
		return mav;
	}
}

arg3参数即是被抛过来的异常
3.在springmvc.xml中配置异常处理器:

<!--配置异常处理器  -->
         <bean id="sysExceptionResovler" class="com.tao.exception.SysExceptionResovler"> </bean>

然后再controller方法中捕获异常,对方法进行异常捕获:

@RequestMapping("/test")
	public String test() throws SysException{
		System.out.println("exceptiontest方法执行");
		//模拟异常
		try {
			int a=4/0;
		} catch (Exception e) {
			//控制台打印
			e.printStackTrace();
			//抛出自定义异常
			throw new SysException(" 出错了!");
		}
		return "success";
	}

最终效果:
在这里插入图片描述
如果在方法中部队异常进行捕获的话,也就是不加try catch语句块,效果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值