spring之ControllerAdvice注解
@ControllerAdvice是Spring 3.2新增的注解,主要是用来Controller的一些公共的需求的低侵入性增强提供辅助,作用于@RequestMapping标注的方法上。
ControllerAdvice的定义如下:
- @Target(ElementType.TYPE)
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- @Component
- public @interface ControllerAdvice {
- /**
- * Alias for the {@link #basePackages} attribute.
- * <p>Allows for more concise annotation declarations e.g.:
- * {@code @ControllerAdvice("org.my.pkg")} is equivalent to
- * {@code @ControllerAdvice(basePackages="org.my.pkg")}.
- * @since 4.0
- * @see #basePackages()
- */
- @AliasFor("basePackages")
- String[] value() default {};
- /**
- * Array of base packages.
- * <p>Controllers that belong to those base packages or sub-packages thereof
- * will be included, e.g.: {@code @ControllerAdvice(basePackages="org.my.pkg")}
- * or {@code @ControllerAdvice(basePackages={"org.my.pkg", "org.my.other.pkg"})}.
- * <p>{@link #value} is an alias for this attribute, simply allowing for
- * more concise use of the annotation.
- * <p>Also consider using {@link #basePackageClasses()} as a type-safe
- * alternative to String-based package names.
- * @since 4.0
- */
- @AliasFor("value")
- String[] basePackages() default {};
- /**
- * Type-safe alternative to {@link #value()} for specifying the packages
- * to select Controllers to be assisted by the {@code @ControllerAdvice}
- * annotated class.
- * <p>Consider creating a special no-op marker class or interface in each package
- * that serves no purpose other than being referenced by this attribute.
- * @since 4.0
- */
- Class<?>[] basePackageClasses() default {};
- /**
- * Array of classes.
- * <p>Controllers that are assignable to at least one of the given types
- * will be assisted by the {@code @ControllerAdvice} annotated class.
- * @since 4.0
- */
- Class<?>[] assignableTypes() default {};
- /**
- * Array of annotations.
- * <p>Controllers that are annotated with this/one of those annotation(s)
- * will be assisted by the {@code @ControllerAdvice} annotated class.
- * <p>Consider creating a special annotation or use a predefined one,
- * like {@link RestController @RestController}.
- * @since 4.0
- */
- Class<? extends Annotation>[] annotations() default {};
- }
和此注解配合使用的其他注解有:
- @ExceptionHandler 自定义的错误处理器
- @ModelAttribute 全局的对所有的controller的Model添加属性
- @InitBinder 对表单数据绑定
下面给一个例子:
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.commons.lang.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.ControllerAdvice;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.ModelAttribute;
- import com.gongren.dlg.activity.exception.NoSessionException;
- /**
- * springMVC的ControllerAdvice
- *
- * @author yzl
- * @see [相关类/方法](可选)
- * @since [产品/模块版本] (可选)
- */
- @ControllerAdvice
- public class WebContextAdvice {
- private static final Logger logger = LoggerFactory.getLogger(WebContextAdvice.class);
- /**
- *
- * 功能描述: <br>
- * 应用上下文设值给Model对象
- * 在jsp中使用:${ctx}
- *
- * @param request
- * @return
- * @see [相关类/方法](可选)
- * @since [产品/模块版本](可选)
- */
- @ModelAttribute(value="ctx")
- public String setContextPath(HttpServletRequest request){
- return request.getContextPath();
- }
- /**
- *
- * 错误处理器
- *
- * @param e
- * @return
- * @see [相关类/方法](可选)
- * @since [产品/模块版本](可选)
- */
- @ExceptionHandler
- public String handleIOException(HttpServletRequest request,HttpServletResponse response,Model model,Exception e) {
- //请求类型,可以区分对待ajax和普通请求
- String requestType = request.getHeader("X-Requested-With");
- if(StringUtils.isNotBlank(requestType)){
- //是ajax
- try {
- response.setCharacterEncoding("UTF-8");
- response.setContentType("application/json; charset=utf-8");
- PrintWriter writer = response.getWriter();
- //具体操作
- writer.write("json...");
- //
- writer.flush();
- writer.close();
- return null;
- } catch (IOException e1) {
- }
- }
- if(e instanceof NoSessionException){
- logger.error("session超时,跳转到活动首页");
- return "redirect:/mc/index";
- }
- logger.error("请求发生错误", e);
- return "redirect:/mc/error";
- }
- }
spring之ControllerAdvice注解的更多相关文章
- spring的@ControllerAdvice注解
@ControllerAdvice注解是Spring3.2中新增的注解,学名是Controller增强器,作用是给Controller控制器添加统一的操作或处理. 对于@ControllerAdvic ...
- Spring的ControllerAdvice注解
@ControllerAdvice,是spring3.2提供的新注解,其实现如下所示: @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUN ...
- spring mvc异常统一处理(ControllerAdvice注解)
首先我的项目是一个为移动端提供的json数据的,当后台报错时如果为移动端返回一个错误页面显得非常不友好,于是通过ControllerAdvice注解返回json数据. 首先创建一个异常处理类: pac ...
- Spring boot异常统一处理方法:@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获
一.全局异常 1.首先创建异常处理包和类 2.使用@ControllerAdvice注解,全局捕获异常类,只要作用在@RequestMapping上,所有的异常都会被捕获 package com.ex ...
- Spring MVC Framework 注解
ControllerAdvice Spring MVC Framework会把 @ControllerAdvice注解内部使用 @ExceptionHandler.@InitBinder.@Model ...
- Spring Boot常用注解总结
Spring Boot常用注解总结 @RestController和@RequestMapping注解 @RestController注解,它继承自@Controller注解.4.0之前的版本,Spr ...
- SpringMVC 中 @ControllerAdvice 注解的三种使用场景!
@ControllerAdvice ,很多初学者可能都没有听说过这个注解,实际上,这是一个非常有用的注解,顾名思义,这是一个增强的 Controller.使用这个 Controller ,可以实现三个 ...
- Spring Boot @ControllerAdvice 处理全局异常,返回固定格式Json
需求 在构建RestFul的今天,我们一般会限定好返回数据的格式比如: { "code": 0, "data": {}, "msg": ...
- spring 、spring boot 常用注解
@Profile 1.用户配置文件注解. 2.使用范围: @Configration 和 @Component 注解的类及其方法, 其中包括继承了 @Component 的注解: @Service. ...
随机推荐
- Matlab神经网络函数newff()新旧用法差异
摘要 在Matlab R2010a版中,如果要创建一个具有两个隐含层.且神经元数分别为5.3的前向BP网络,使用旧的语法可以这样写: net1 = newff(minmax(P), [5 3 1]); ...
- .android:allowTaskReparenting 等Activity 的task属性
转自http://blog.csdn.net/javayinjaibo/article/details/8855678 1.android:allowTaskReparenting 这个属性用来标记一 ...
- C2第四次作业解题报告
看过题解后如果觉得还算有用,请帮忙加点我所在团队博客访问量 http://www.cnblogs.com/newbe/ http://www.cnblogs.com/newbe/p/4069834.h ...
- 使用 New Relic 监控接口服务性能
偶然看到贴子在使用[Rails API] 使用这个APM监控,今天试了下.NET IIS环境下,配置一路NEXT即可. 主要指标 服务响应时间 Segment SQL执行时间 安全问题 1.走HTTP ...
- Dos脚本判断文件大小
@echo off & setlocal EnableDelayedExpansion del 1.txt /q del 2.txt /q for /f %%i in (*) do (echo ...
- [游戏模版12] Win32 稳定定时
>_<:The last time,we learned how to use timer to make the picture run and change show,but some ...
- Firefox SVG getBBox方法返回'NS_ERROR_FAILURE'错误分析
在SVG中,我们无法给Text元素设置Width和Height属性,因此无法直接获取Text元素的高和宽.如果想要给Text元素添加背景色,最简单的办法就是在Text元素的下面添加Rect,然后给Re ...
- [BTS] MSDTC
A message sent to adapter "WCF-SQL" on send port "SP.TMS.InsertDataToDB.WCFSQL" ...
- 自制操作系统(二) 让bootsector开机启动打印一首诗
qq:992591601 欢迎交流 2016-03-31作 2016-06-01.2016-06-27改 我总结了些基本原理: 1.软盘的第一个扇区为启动区 2.计算机读软盘是以512字节为单位来读写 ...
- 构建单页Web应用
摘自前端农民工的博客 让我们先来看几个网站: coding teambition cloud9 注意这几个网站的相同点,那就是在浏览器中,做了原先“应当”在客户端做的事情.它们的界面切换非常流畅,响应 ...