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

7 篇文章 0 订阅

    在使用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群)



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值