一、定义一个统一异常处理类java
@ControllerAdvice public class ExptionTest { @ExceptionHandler(Exception.class) @ResponseBody public Object exp(Exception exception){ Map<String, Object> map = new HashMap<String, Object>(); map.put("error", "顶层错误处理"); map.put("errorInfo", exception); map.put("errorInfo2", exception.getMessage()); StringWriter s = new StringWriter(); PrintWriter pw=new PrintWriter(s); exception.printStackTrace(pw); map.put("errorInfo3", s.toString()); return map; } @ModelAttribute public User newUser() { System.out.println("============应用到全部@RequestMapping注解方法,在其执行以前把返回值放入Model"); return new User(); } @InitBinder public void initBinder(WebDataBinder binder) { System.out.println("============应用到全部@RequestMapping注解方法,在其执行以前初始化数据绑定器"); } }
@ControllerAdvice,是spring3.2提供的新注解, 通常扫描<context:component-scan>扫描时也能扫描到,不须要在配置文件配置web
但若是你的spring-mvc配置文件使用以下方式扫描beanspring
<context:component-scan base-package="com.sishuok.es" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
须要把 @ControllerAdvice包含进来,不然不起做用:express
<context:component-scan base-package="com.sishuok.es" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/> </context:component-scan>
一、@ModelAttribute注解的方法做用请参考 SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解——跟着开涛学SpringMVC 中的【2、暴露表单引用对象为模型数据】,做用是同样的,只不过此处是对全部的@RequestMapping注解的方法都起做用。当须要设置全局数据时比较有用。spring-mvc
二、@InitBinder注解的方法做用请参考 SpringMVC数据类型转换——第七章 注解式控制器的数据验证、类型转换及格式化——跟着开涛学SpringMVC ,同1相似。当须要全局注册时比较有用。mvc
三、@ExceptionHandler,异常处理器,此注解的做用是当出现其定义的异常时进行处理的方法,其可使用springmvc提供的数据绑 定,好比注入HttpServletRequest等,还能够接受一个当前抛出的Throwable对象。能够参考javadoc或snowolf的 Spring 注解学习手札(八)补遗——@ExceptionHandler 。app
@ModelAttribute 和 @InitBinder 用得很少,统一异常处理类其实也不必写出这两个引用注解的方法,直接保留@ExceptionHandler注解的方法便可学习
即把@ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解 的方法应用到全部的 @RequestMapping注解的方法。很是简单,不过只有当使用@ExceptionHandler最有用,另外两个用处不大。ui
该 @ControllerAdvice 注解很是简单,能够把异常处理器应用到全部控制器 @Controller ,而不是@Controller注解的单个控制器。 单个控制器请用 @ExceptionHandler 注解,这样在该异常处理器对当前控制器的全部方法有效。.net
若是某控制器须要自定义处理异常,不用顶层的异常处理器,请在当前控制器内用 @ExceptionHandler 注解 ,这样当前控制器的异常处理就在当前类
做用域:@ControllerAdvice > @ExceptionHandler > try catch
优先级: try catch > @ExceptionHandler > @ControllerAdvice
转载参考:http://jinnianshilongnian.iteye.com/blog/1866350?utm_source=tuicool&utm_medium=referral
http://blog.csdn.net/ufo2910628/article/details/40399539