springmvc controller 统一异常处理

来源:互联网 发布:淘宝卖水果需要什么 编辑:程序博客网 时间:2024/06/04 23:25

针对springmvc controller层面有多种统一异常处理方法,包括默认的,自定义的,以及注解配置的。这里我推荐一种自定义异常处理方式,它能够处理ajax调用的异常和普通视图调用的异常(比如jsp)。具体的代码如下:

public class GlobalHandlerExceptionResolver implements HandlerExceptionResolver {    private static final Logger logger = LoggerFactory.getLogger(GlobalHandlerExceptionResolver.class);    /**     * 没有区分是哪种情况的异常     */    @Override    public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse resp, Object o, Exception ex) {        logger.error(ex.getMessage(), ex);        HandlerMethod method = (HandlerMethod) o;        // ResponseBody.class注解说明是ajax调用,否则返回视图        if (method.getMethod().isAnnotationPresent(ResponseBody.class)) {            try {                resp.getWriter().write(ex.getMessage());                resp.getWriter().flush();                resp.getWriter().close(); //这里很重要,否则ajax的readystatus为0            } catch (Exception e) {                logger.error(e.getMessage());            }            return null;        } else {            Map<String, String> map = new HashMap<String, String>();            map.put("errorInfo", "服务器异常,异常提示:" + ex.getMessage());            return new ModelAndView("error/error", map);        }    }}

使用说明在spring配置文件中,配置改异常处理bean,代码如下:

<!-- 控制器异常处理 -->    <bean id="exceptionResolver" class="com.***.exceptionhandler.GlobalHandlerExceptionResolver" />

ajax调用处理,异常信息在error中处理,通过response.responseText将异常信息进行提示。

$.ajax({                       type: "POST",                       url: serverContext + "/checkLogin",                       dataType : "json",                       data: {                           "teamName" : $("#teamName").val(),                           "password" : hex_md5($("#password").val()),                       },                       success: function(response){                           var errorInfo = response.errorInfo;                           if (errorInfo != "ok"){                               $("#warn").text(errorInfo).show();                               return;                           }else{                               window.location.href = serverContext + "/index";                           }                       },                       error: function(response){                           $("#warn").text("服务器异常,异常信息:" + response.responseText).show();                           return;                       }                })

普通的视图处理,即返回了一个error/error.jsp页面,里面可以使用errorInfo变量进行错误提示。

原创粉丝点击