需求:当出问题时,不能总是显示404页面等,我们可以设置异常处理信息。
首先我们可以自定义一个异常
package com.ssm.exception; public class ShopException extends Exception { // 异常信息 public String message; public ShopException(String message) { super(message); this.message = message; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
让他继承exception类,它的构造函数接受错误信息,并输出,这样我们可以手动抛出这个异常
我们接下拉定义全局异常管理器。
package com.ssm.exception; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; public class ShopExceptionResolver implements HandlerExceptionResolver{ //ex接受的异常 @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { // TODO Auto-generated method stub ShopException shopException =null; //如果是系统自定义的异常则直接转换 if(ex instanceof ShopException) { shopException =(ShopException)ex; }else { //如果抛出的不是系统自定义的异常,则要重新构造一个未知错误异常 shopException=new ShopException("未知错误"); } //错误信息 String message=shopException.getMessage(); ModelAndView modelAndView =new ModelAndView(); //将错误信息转到页面上去 modelAndView.addObject("errormessage", message); //转发到jsp页面 modelAndView.setViewName("error"); return modelAndView; } }
这将所有异常进行了批量管理。他必须继承HandlerExceptionResolver接口这个类才能被当作全局异常管理器。
接下来在springmvc中配置springmvc的异常管理器
这个bean的class就是我们自定义的全局异常管理器。
如果
if (orderByName.size() == 0) { throw new ShopException("查询的信息不存在"); }
这种错误我们手动抛出异常。那么接下来自定义的全局异常管理器便会接手这个异常,因为出错后我们抛出了ShopException这个自定义异常,所以全局处理器会根据系统自定义异常来管理这个错误。
如果不抛出自定义异常那么只会显示未知错误。