需求:当出问题时,不能总是显示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这个自定义异常,所以全局处理器会根据系统自定义异常来管理这个错误。
如果不抛出自定义异常那么只会显示未知错误。