博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring中的异常处理(兼顾AJAX和FORM)
阅读量:6334 次
发布时间:2019-06-22

本文共 3409 字,大约阅读时间需要 11 分钟。

总结了一下在使用SPRING开发过程中使用的异常处理方式,查找了一些资料,并在此作为记录。

统一异常处理-使用默认Resolver

使用SimpleMappingExceptionResolver进行处理,这样controller层不需要捕获异常,Spring框架会进行处理。SimpleMappingExceptionResolver是spring的默认实现,但是无法处理AJAX的异常解析

exception/ioexception
exception/dbexception

统一异常处理- 使用自定义异常处理器

* 新建自定义异常处理器
public class MyExceptionHandler implements HandlerExceptionResolver{    public ModelAndView resolveException(HttpServletRequest request , HttpServletResponse response,Object handler,Exception ex){        Map
model = new HashMap
(); model.put("ex",ex); if(ex instanceof ExceptionA){ return new ModelAndView("exception/exception_a",model); }else if(ex instanceof ExceptionB){ return new ModelAndView("exception/exception_b",model); }else{ return new ModelAndView("exception/exception_a",model); } }}
* 新建自定义异常页面* bean声明

统一异常处理-使用@ExceptionHandler注解

* 在Controller的基类中声明方法,这种方法无需任何配置(当然要注解扫描)
@ExceptionHandlerpublic String expaaa(HttpServletRequest request, Exception ex) {    request.setAttribute("ex", ex);    if(ex instanceof ExceptionA){        return "exception/exception_a";    }else if(ex instanceof ExceptionB){        return "exception/exception_b";    }else{        return "exception/exception_a";    }}
* 其他Controller继承上面的基类

统一异常处理-未捕获异常的处理

在web.xml中定义

java.lang.Throwable
/500.jsp
500
/500.jsp
404
/404.jsp

大一统-包含表单和AJAX异常处理

* 增加自定义异常处理器,同时如果是AJAX请求,会返回对应的错误回应
public class GlobalExceptionResolver extends SimpleMappingExceptionResolver {    protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response,Object handler, Exception ex){        String viewName = determineViewName(ex,request);        response.setCharacterEncoding("UTF-8");        if(viewName!=null){            if (!(request.getHeader("accept").contains("application/json")  ||                    ( request.getHeader("X-Requested-With")!= null  && request.getHeader("X-Requested-With").contains("XMLHttpRequest") ) )) {                Integer statusCode = determineStatusCode(request,viewName);                if(statusCode !=null){                    applyStatusCodeIfPossible(request,response,statusCode);                }                System.out.println("JSP Format Return" + viewName);                return getModelAndView(viewName,ex,request);            }else{                try{                    PrintWriter writer = response.getWriter();                    writer.write(ex.getMessage());                    writer.flush();                }catch(IOException e){                    e.printStackTrace();                }                System.out.println("JSP Format Return" + viewName);                return null;            }        }else{            return null;        }    }}
* 配置exceptionresolver
exception/ioexception
exception/dbexception
exception/exception_a
exception/exception_b
* DONE

转载地址:http://jgioa.baihongyu.com/

你可能感兴趣的文章
C++ String
查看>>
获取系统托盘图标的坐标及文本
查看>>
log4j Test
查看>>
HDU 1255 覆盖的面积(矩形面积交)
查看>>
Combinations
查看>>
SQL数据库无法附加,提示 MDF" 已压缩,但未驻留在只读数据库或文件组中。必须将此文件解压缩。...
查看>>
第二十一章流 3用cin输入
查看>>
在workflow中,无法为实例 ID“...”传递接口类型“...”上的事件“...” 问题的解决方法。...
查看>>
获取SQL数据库中的数据库名、所有表名、所有字段名、列描述
查看>>
Orchard 视频资料
查看>>
简述:预处理、编译、汇编、链接
查看>>
调试网页PAIP HTML的调试与分析工具
查看>>
路径工程OpenCV依赖文件路径自动添加方法
查看>>
玩转SSRS第七篇---报表订阅
查看>>
WinCE API
查看>>
SQL语言基础
查看>>
对事件处理的错误使用
查看>>
最大熵模型(二)朗格朗日函数
查看>>
深入了解setInterval方法
查看>>
html img Src base64 图片显示
查看>>