1.异常处理思路
Controller调用Service,Service调用Dao,异常是向上抛出的,最终由DispatcherServlet找异常处理器进行异常处理
2.代码编写和配置
2.1 编写自定义类
package nju.software.exception;
/**
* 自定义的异常类
*/
public class SysException extends Exception {
//存储提示信息
private String message;
public SysException(String message) {
this.message = message;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
基本属于固定写法,继承Exception类,用来放存需要响应异常的提示信息。
2.2 编写异常处理器
通过实现一个web可以支持的框架接口,在上层自定义我们需要的异常响应方式,包括model-session和响应页面配置,这个页面同样受视图解析器的控制。
package nju.software.exception;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 异常处理器,基于一个可以被spring处理的Handler类
*/
public class SysExceptionResolver implements HandlerExceptionResolver {
/**
* 处理异常的业务逻辑
* @param httpServletRequest
* @param httpServletResponse
* @param o
* @param e
* @return
*/
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
//获取异常对象
SysException sysException = null;
if (e instanceof SysException){
sysException = (SysException)e;
}else {
sysException = new SysException("系统正在维护!");
}
//注意返回值ModelAndView是底层的处理后台到view的对象
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("errorMsg",sysException.getMessage());
modelAndView.setViewName("success");
return modelAndView;
}
}
2.3 配置异常处理器
<!-- 配置异常处理器-->
<bean id="sysExceptionResolver" class="nju.software.exception.SysExceptionResolver"></bean>