Spring中@ExceptionHandler注解使用教程

我看过很多SpringMVC的项目,很多是没有异常处理的。本文将教你如何通过@ExceptionHandler注解来进行处理。

更多精彩内容请看 web前端中文站
www.lisa33xiaoq.net 可按Ctrl + D 进行收藏

@ExceptionHandler可以统一处理一个Controller中抛出的异常,可以统一处理所有Controller中抛出的异常。

该注解作用对象为方法,并且在运行时有效,value()可以指定异常类。由该注解注释的方法可以具有灵活的输入参数(详细参见Spring API):

  • 异常参数:包括一般的异常或特定的异常(即自定义异常),如果注解没有指定异常类,会默认进行映射。
  • 请求或响应对象 (Servlet API or Portlet API): 你可以选择不同的类型,如ServletRequest/HttpServletRequest或PortleRequest/ActionRequest/RenderRequest
  • Session对象(Servlet API or Portlet API): HttpSession或PortletSession。
  • WebRequest或NativeWebRequest 
  • Locale
  • InputStream/Reader 
  • OutputStream/Writer 
  • Model

方法返回值可以为:

  • ModelAndView对象
  • Model对象
  • Map对象
  • View对象
  • String对象
  • 还有@ResponseBody、HttpEntity<?>或ResponseEntity<?>,以及void

@ExceptionHandler的使用很简单,用法如下面的代码:

 /**  * 统一异常处理  * @param request  * @param response  * @param exception  */ @ExceptionHandler public String exceptionHandler(HttpServletRequest request, HttpServletResponse response, Exception exception) {     _log.error("统一异常处理:", exception);     request.setAttribute("ex", exception);     if (null != request.getHeader("X-Requested-With") && request.getHeader("X-Requested-With").equalsIgnoreCase("XMLHttpRequest")) {         request.setAttribute("requestHeader", "ajax");     }     // shiro没有权限异常     if (exception instanceof UnauthorizedException) {         return "/403.jsp";     }     // shiro会话已过期异常     if (exception instanceof InvalidSessionException) {         return "/error.jsp";     }     return "/error.jsp"; }

如果要做到全局Controller异常处理,只需要新建一个Controller让其他Controller继承该Controller即可。

上面的代码只要Controller中有异常,都会被exceptionHandler方法扑获并执行。

Spring有3个异常处理的注解,分别如下:

  • @ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度
  • @ControllerAdvice:异常集中处理,更好的使业务逻辑与异常处理剥离开
  • @ResponseStatus:可以将某种异常映射为HTTP状态码

@ControllerAdvice注解作用对象为TYPE,包括类、接口和枚举等,在运行时有效,并且可以通过Spring扫描为bean组件。其可以包含由@ExceptionHandler、@InitBinder 和@ModelAttribute标注的方法,可以处理多个Controller类,这样所有控制器的异常可以在一个地方进行处理。

@ExceptionHandler和@ControllerAdvice能够集中异常,使异常处理与业务逻辑分离。

本文原文出处:web前端中文站: » Spring中@ExceptionHandler注解使用教程

【注:本文源自网络文章资源,由站长整理发布】

0
如无特殊说明,文章均为原作者原创,转载请注明出处

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论

Hi,请填写昵称和邮箱!

取消评论
代码 贴图 加粗 链接 删除线 签到