第一步:自定义异常类(继承java中的Exception类)
/**
* 自定义异常
*/
public class SysException extends Exception{
/**
* 异常提示
*/
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public SysException(String message) {
this.message = message;
}
}
第二步:新建异常处理类(实现SpringMvc中的HandlerExceptionResolver接口)
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 异常处理
*/
public class ExceptionResover implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
SysException ex = null;
if (e instanceof SysException) {
ex = (SysException) e;
} else {
ex = new SysException("系统正在维护升级,详情请联系管理员");
}
// 跳转异常页面
ModelAndView mv = new ModelAndView();
mv.addObject("message", ex.getMessage());
mv.setViewName("excption");
return mv;
}
}
第三步:在Spring的配置文件中注册异常处理类
<!-- 配置异常处理 -->
<bean id="sysException" class="work.chenc.exception.ExceptionResover"></bean>
第四步:新增异常时需要跳转的页面
第五步:手动模拟异常进行测试(新增一个类)
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import work.chenc.exception.SysException;
@Controller
public class TestExceptController {
@RequestMapping(value = "/testException")
public String testException() throws SysException {
System.out.println("testException----------");
try {
int a = 10/0;
} catch (Exception e) {
e.printStackTrace();
throw new SysException("未知错误");
}
return "success";
}
}
总结:在实际开发中无论是持久层(Da0)还是业务层(service)出现异常时我们都是将异常进行抛出,然后在控制层我们对异常捕获。在SpringMVC中我们可以一直将异常抛出,直至抛给SpringMVC的前端控制器(DispatcherServlet)在这里进行异常处理,因为DispatcherServlet相当于一个调度中心,浏览器所有的及服务端的数据返回都是要经过DispatcherServlet