springMVC自定义异常

spring有默认的exception处理方式,但是很多时候我们都需要自定义异常处理:

下面是spring中exception的结构:


spring默认是采用SimpleMappingExceptionResolver来处理异常,我们自定义异常的处理方式只需要继承DefaultHandlerException,复写doResolveException方法,在这里处理我们的异常处理方式:

1、自定义ExceptionHandler,将这个注册成bean:属于我们的自定义异常就返回错误信息,不属于我们自定义的异常,就重定向到错误页面


public class WbExceptionHandler extends DefaultHandlerExceptionResolver {
    private static final Logger logger = Logger.getLogger(WbExceptionHandler.class);

    @Override
    protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        if (ex instanceof WbRuntimeException) {
            //判断如果是属于我们自定义的runtime异常,就是返回json格式的错误信息:设置response的响应错误码,添加json格式的错误信息
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.addObject("error", ex.getMessage());
            return modelAndView;
        } else {
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            try {
                //重定向到error的controller中
                response.sendRedirect(request.getContextPath() + "/error");
            } catch (IOException e) {
                logger.error(e.getMessage());
            }
            return new ModelAndView();
        }

    }

}
 
public class UserNotExitException extends  WbRuntimeException {
    public UserNotExitException(){
        super("用户名或者密码错误");
    }
}

 2、自定义runtime异常信息 

public class WbRuntimeException extends RuntimeException {

    public WbRuntimeException(String message) {
        super(message);
    }

    public WbRuntimeException() {
    }

    ;
}
3、在抛出异常的时候就抛出我们自定义的异常就可以得到异常信息了:
throw new UserNotExitException();
对应json请求的时候,获取错误信息:
error: function (data) {
   console.log(data);
  var message = eval('(' + data.responseText + ')');
   alert(message.error);          
 }

在web.xml中还可以配置错误代码指定页面:
<error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/404_error.jsp</location>
</error-page>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值