文档章节

spring mvc 统一异常处理

q
 qiun
发布于 2016/06/24 17:38
字数 724
阅读 693
收藏 5

1、定义一个统一异常处理类

@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>扫描时也能扫描到,不需要在配置文件配置

但如果你的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

@ModelAttribute 和 @InitBinder 用得不多,统一异常处理类其实也没必要写出这两个引用注解的方法,直接保留@ExceptionHandler注解的方法即可

即把@ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解 的方法应用到所有的 @RequestMapping注解的方法。非常简单,不过只有当使用@ExceptionHandler最有用,另外两个用处不大。

该 @ControllerAdvice 注解非常简单,可以把异常处理器应用到所有控制器 @Controller ,而不是@Controller注解的单个控制器。 单个控制器请用 @ExceptionHandler 注解,这样在该异常处理器对当前控制器的所有方法有效。

如果某控制器需要自定义处理异常,不用顶层的异常处理器,请在当前控制器内用 @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

 

 

© 著作权归作者所有

q

qiun

粉丝 0
博文 39
码字总数 11616
作品 0
广州
私信 提问
spring mvc 统一异常处理,spring security 对 AuthenticationException 异常处理失效

因配置了 spring mvc 统一异常处理,导致了 spring security 对 AuthenticationException 异常处理失效,原本用 spring security 来实现的 登入检查,权限检查 均被 spring mvc 处理掉了。 ...

LucEsape
2016/02/23
1K
1
Spring Cloud Spring Boot mybatis分布式微服务云架构 返回JSON格式

在上述例子中,通过统一定义不同Exception映射到不同错误处理页面。而当我们要实现RESTful API时,返回的错误是JSON格式的数据,而不是HTML页面,这时候我们也能轻松支持。 本质上,只需在之...

itcloud
2018/06/21
27
0
SpringCloud SpringBoot mybatis分布式微服务云架构返回JSON格式

在上述例子中,通过统一定义不同Exception映射到不同错误处理页面。而当我们要实现RESTful API时,返回的错误是JSON格式的数据,而不是HTML页面,这时候我们也能轻松支持。 本质上,只需在之...

itcloud
2018/08/07
64
0
让Spring Controller 的方法基本数据类型参数支持Bean Validation

让Spring Controller 的方法基本数据类型参数支持Bean Validation Spring中的Bean Validation 我们知道Spring MVC层是默认可以支持Bean Validation的,尝试使用了一下感觉很不方便,只支持对...

ForEleven
2014/04/18
8.9K
31
Spring MVC 系统异常处理方式及性能对比

大部分公司所用的Spring框架版本是3.1版本以下,所以今天暂时总结3.1版本的Spring-MVC异常处理方式。 一、Spring MVC处理异常有3种方式: (1)使用Spring-MVC提供的SimpleMappingExceptionR...

Candy_Desire
2014/10/17
14.7K
5

没有更多内容

加载失败,请刷新页面

加载更多

还为PDF转Word抓狂?以下神器让你在职场倍受欢迎!

身在职场的你,是否一直在琢磨:如何能让自己在公司更受欢迎?如何才能在办公室里混个好人缘?如何在同事圈里留个好印象?其实,想要让自己成为受欢迎的人,只要让自己成为大家需要的人不就行...

foxit2world
13分钟前
6
0
AndServer+Service打造Android服务器实现so文件调用

so 文件调用 随着 Android 移动安全的高速发展,不管是为了执行效率还是程序的安全性等,关键代码下沉 native 层已成为基本操作。 native 层的开发就是通指的 JNI/NDK 开发,通过 JNI 可以实...

夜幕NightTeam
15分钟前
3
0
Docker下kafka学习三部曲之二:本地环境搭建

在上一章《 Docker下kafka学习,三部曲之一:极速体验kafka》中我们快速体验了kafka的消息分发和订阅功能,但是对环境搭建的印象仅仅是执行了几个命令和脚本,本章我们通过实战来学习如何编写...

程序员欣宸
15分钟前
4
0
萌新推荐!不再为Excel转换PDF发愁,Aspose.Cells for .NET一步到位!

Aspose.Cells for .NET(点击下载)是Excel电子表格编程API,可加快电子表格管理和处理任务,支持构建具有生成,修改,转换,呈现和打印电子表格功能的跨平台应用程序。 将Excel工作簿转换为...

mnrssj
16分钟前
6
0
对于绘画小白怎么画制服?该注意什么?

怎样制作学生服装?想必绘画初学者们常常会想的问题吧,不知道怎样才能画好人物的衣服,别着急,今日就在这儿讲一些关于如何绘画学生衣服校服的教程给我们!期望能够帮到你们! 轻便西装是不...

热爱画画的我
21分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部