您的位置:首页 > 编程语言 > Java开发

使用@ControllerAdvice和@ExceptionHandler定义全局捕获异常

2018-03-15 18:00 435 查看
    在使用Springmvc框架处理controller的中,难免会出现逻辑错误,导致代码抛出异常的现象,习惯性都使用try/catch来捕获异常。但是当controller多了,方法也多了的时候,每个方法的异常捕获其实都一样,如果每个方法都复制粘贴同样的代码,会显得代码冗余,所以在Spring3.2以后,添加了@ControllerAdvice注解,用于全局处理异常,从而使代码简洁。
全局异常处理类//异常处理类
@ControllerAdvice
public class GlobalDefaultExceptionHandler {

//如果需要返回值的是view,则方法的返回值是ModelAndView
//如果需要返回值是String或者Json数据,则需要在方法上添加@ResponseBody
@ExceptionHandler(value=RuntimeException.class)
@ResponseBody
public String defaultExceptionHandler(HttpServletRequest request){
return "对不起,服务器正忙,请稍后再试";
}
}
使用ExceptionHandler注解的异常处理方法可以使用很灵活的方法签名。可以使用以下类型的参数,参数可以以任意书序传递:(1) 一个异常参数。声明一个一般性的异常或者更加具体的异常(2) Request 和/或 response 对象(Servlet API 或 Portlet API)。可以选择一个特定 request/response的类型,比如ServletRequest / HttpServletRequest 或 PortletRequest / ActionRequest / RenderRequest(3) Session 对象 (Servlet API 或Portlet API)。可以是 HttpSession ,也可以是PortletSession。这种类型的参数强制要求存在一个会话。因此,这个参数不能为null。请注意,会话访问可能是非线程安全的,特别是在一个Servlet环境中。如果多个请求可以访问一个会话,请考虑将synchronizeOnSession标志修改为 "true"(4) WebRequest 或 NativeWebRequest(5) Locale(6) InputStream / Reader 访问请求内容(7) OutputStream / Writer 生成响应内容(8) Model---------------------------------------------------------------------异常处理方法支持的返回值类型:(1) ModelAndView 对象 (Servlet MVC or Portlet MVC)(2) Model 对象, 通过RequestToViewNameTranslator 隐式确定的一个视图名称(3) Map 对象, 通过RequestToViewNameTranslator 隐式确定的一个视图名称(4) View 对象(5) 被解析成一个视图名称的String 值(6) @ResponseBody 注解的方法 (仅限Servlet) 设置响应内容(7) HttpEntity<?> 或 ResponseEntity<?> (仅限Servlet) 设置响应头和响应内容(8) void方法自己处理了响应(通过直接写响应内容,需要声明一个属于ServletResponse / HttpServletResponse / RenderResponse 类型的参数)或者通过RequestToViewNameTranslator 隐式确定的一个视图名称(没有在方法签名中声明任何响应参数,仅适用于Servlet环境)

====================打个广告,欢迎关注====================
QQ:412425870
csdn博客:
http://blog.csdn.net/caychen
码云:
https://gitee.com/caychen/
github:
https://github.com/caychen
点击群号或者扫描二维码即可加入QQ群:
328243383(1群)



点击群号或者扫描二维码即可加入QQ群:180479701(2群)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java Spring