@ControllerAdvice,是spring3.2提供的新注解,从名字上可以看出大体意思是控制器增强。让我们先看看@ControllerAdvice的实现:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface ControllerAdvice { }
没什么特别之处,该注解使用@Component注解,这样的话当我们使用<context:component-scan>扫描时也能扫描到,具体可参考【第十二章】零配置 之 12.3 注解实现Bean定义 ——跟我学spring3。
其javadoc定义是:
* Indicates the annotated class assists a "Controller".
*
* <p>Serves as a specialization of {@link Component @Component}, allowing for
* implementation classes to be autodetected through classpath scanning.
*
* <p>It is typically used to define {@link ExceptionHandler @ExceptionHandler},
* {@link InitBinder @InitBinder}, and {@link ModelAttribute @ModelAttribute}
* methods that apply to all {@link RequestMapping @RequestMapping} methods.
*
* @author Rossen Stoyanchev
* @since 3.2
*/
即把@ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法应用到所有的 @RequestMapping注解的方法。非常简单,不过只有当使用@ExceptionHandler最有用,另外两个用处不大。
接下来看段代码:
@ControllerAdvice public class ControllerAdviceTest { @ModelAttribute public User newUser() { System.out.println("============应用到所有@RequestMapping注解方法,在其执行之前把返回值放入Model"); return new User(); } @InitBinder public void initBinder(WebDataBinder binder) { System.out.println("============应用到所有@RequestMapping注解方法,在其执行之前初始化数据绑定器"); } @ExceptionHandler(UnauthenticatedException.class) @ResponseStatus(HttpStatus.UNAUTHORIZED) public String processUnauthenticatedException(NativeWebRequest request, UnauthenticatedException e) { System.out.println("===========应用到所有@RequestMapping注解的方法,在其抛出UnauthenticatedException异常时执行"); return "viewName"; //返回一个逻辑视图名 } }
如果你的spring-mvc配置文件使用如下方式扫描bean
<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包含进来,否则不起作用:
<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>
1、@ModelAttribute注解的方法作用请参考SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解——跟着开涛学SpringMVC中的【二、暴露表单引用对象为模型数据】,作用是一样的,只不过此处是对所有的@RequestMapping注解的方法都起作用。当需要设置全局数据时比较有用。
2、@InitBinder注解的方法作用请参考SpringMVC数据类型转换——第七章 注解式控制器的数据验证、类型转换及格式化——跟着开涛学SpringMVC,同1类似。当需要全局注册时比较有用。
3、@ExceptionHandler,异常处理器,此注解的作用是当出现其定义的异常时进行处理的方法,其可以使用springmvc提供的数据绑定,比如注入HttpServletRequest等,还可以接受一个当前抛出的Throwable对象。可以参考javadoc或snowolf的Spring 注解学习手札(八)补遗——@ExceptionHandler。
该注解非常简单,大多数时候其实只@ExceptionHandler比较有用,其他两个用到的场景非常少,这样可以把异常处理器应用到所有控制器,而不是@Controller注解的单个控制器。
相关推荐
在Spring MVC 3.2版本中,`@ControllerAdvice`注解的引入极大地简化了全局异常处理的实现。 `@ControllerAdvice`注解是Spring 3.2版本后提供的一种机制,允许开发者在一个全局范围内对Controller层进行增强处理。...
《Spring Framework 3.2 中文版》是Spring框架的重要参考文档,由一系列专家共同编著,包括Rod Johnson、Juergen Hoeller等人。该文档详细介绍了Spring 3.2版本的各种特性和增强功能,旨在帮助开发者更好地理解和...
- **Spring 3.2及之后**:从Spring 3.2开始,cglib被内置为Spring的一部分,不再需要单独添加依赖。 #### 1.3 Java-based Web Configuration - **使用Java配置**:相较于XML配置,Java配置提供了更简洁、更易于...
1. **改进的注解支持**:Spring MVC 3.2进一步强化了对注解的支持,如@Controller、@RequestMapping、@ResponseBody等,使得开发者能够更加简洁地定义控制器和处理请求。例如,通过@RequestMapping注解,可以轻松地...
- Spring 3.2版本中,支持Servlet 3异步请求处理基础,SpringMVC的测试框架得到增强,内容协商和@ControllerAdvice注释的改进。 - 引入了基于代码的Servlet 3+容器初始化抽象基类,以及...
@ControllerAdvice注解可以用于声明全局的异常处理器,而Spring 3.2中新增的ResponseEntityExceptionHandler类进一步丰富了异常处理功能。 随着时间的推进和技术的发展,Spring框架通过不断推出新版本,引入了大量...
自定义异常处理器,使用@ControllerAdvice和@ExceptionHandler注解,可以集中处理全局的异常。 5. 性能优化 使用拦截器进行权限控制、日志记录、性能监控等。配置缓存机制,如使用Spring Cache或第三方库如Redis,...
在 Spring MVC 3.2 中,可以通过 @RequestMapping 注解来映射 URL 到 Controller 方法,实现灵活的请求路由。 接下来是映射处理器。Controller 类中的方法通常带有 @RequestMapping 注解,用于指定哪些请求应该由该...
8. **异常处理**:Spring MVC提供了全局异常处理机制,通过`@ControllerAdvice`和`@ExceptionHandler`注解,可以集中处理异常并返回自定义的错误响应。 在实际开发中,结合以上知识,我们可以构建一个完整的RESTful...
4.3 Spring MVC 的常用注解 82 4.3.1 点睛 82 4.3.2 示例 83 4.4 Spring MVC 基本配置 87 4.4.1 静态资源映射 88 4.4.2 拦截器配置 89 4.4.3 @ControllerAdvice 91 4.4.4 其他配置 94 4.5 Spring MVC 的高级配置 98 ...
Spring Boot 支持通过 `@ControllerAdvice` 和 `@ExceptionHandler` 来全局处理异常。可以在控制器建议类中定义异常处理方法,返回特定的视图或 JSON 响应。 **6.10 如何使用 Spring Boot 实现分页和排序?** ...
4.3 Spring MVC 的常用注解 82 4.3.1 点睛 82 4.3.2 示例 83 4.4 Spring MVC 基本配置 87 4.4.1 静态资源映射 88 4.4.2 拦截器配置 89 4.4.3 @ControllerAdvice 91 4.4.4 其他配置 94 4.5 Spring MVC 的高级配置 98 ...
4.3 Spring MVC 的常用注解 82 4.3.1 点睛 82 4.3.2 示例 83 4.4 Spring MVC 基本配置 87 4.4.1 静态资源映射 88 4.4.2 拦截器配置 89 4.4.3 @ControllerAdvice 91 4.4.4 其他配置 94 4.5 Spring MVC 的高级配置 98 ...
5. **异常处理**:使用@ControllerAdvice和@ExceptionHandler注解定义全局的异常处理器,为RESTful服务提供统一的错误响应。 **jQuery和JSON的交互** jQuery是一个流行的JavaScript库,它简化了与服务器的交互,...
SpringMVC提供了多种异常处理机制,例如使用@ControllerAdvice和@ExceptionHandler注解来全局处理异常。 ##### 3.6 截请求中,怎么配置get方式提交 可以通过在控制器方法上使用@GetMapping注解来限制只接受GET请求...
- **异常处理**: 使用@ControllerAdvice注解的类处理异常。 - **错误页面**: 自定义错误页面。 - **状态码**: 设置HTTP响应的状态码。 **5.5 表单支持** - **表单绑定**: 使用`@ModelAttribute`注解自动绑定表单...
4. 异常处理在SpringMVC中,可以全局或局部地定义异常处理器,例如,通过@ControllerAdvice注解的类或在web.xml中配置的ErrorController。如果处理器方法抛出异常,SpringMVC会查找并调用适当的异常处理器进行处理。...
通过@ControllerAdvice和@ExceptionHandler注解处理异常。 **11.4 拦截器** 拦截器可以对请求进行预处理或后处理。 **11.3.1 登录拦截器** 实现用户登录验证的功能。 **11.5 json数据交互** 通过Jackson或Gson...
- **全局异常处理器**:使用@ControllerAdvice和@ExceptionHandler注解定义全局异常处理器。 - **自定义异常**:可以自定义异常类,并通过全局异常处理器进行处理。 ### 六、总结 SpringMVC作为一款优秀的Web应用...
Spring MVC从3.2版本开始,引入了对异步请求的支持,这主要建立在Servlet 3.0及其以上版本的异步处理功能之上。下面将详细介绍如何在Spring MVC中配置和实现异步请求。 ### 1. 配置Web应用以支持异步处理 首先,你...