Spring进阶之@ControllerAdvice与统一异常处理

>>强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!


本节主要介绍Spring框架中的@ControllerAdvice、其关联注解,以及对应的应用,介绍利用@ControllerAdvice来实现接口的统一异常处理功能。

@ControllerAdvice

Spring源码中有关@ControllerAdvice的注解如下:

Specialization of {@link Component @Component} for classes that declare {@link ExceptionHandler @ExceptionHandler}, {@link InitBinder @InitBinder}, or {@link ModelAttribute @ModelAttribute} methods to be shared across multiple {@code @Controller} classes.

理解:

@ControllerAdvice是一个特殊的@Component,用于标识一个类,这个类中被以下三种注解标识的方法:@ExceptionHandler@InitBinder@ModelAttribute,将作用于所有的@Controller类的接口上。

那么,这个三个注解分别是什么意思,起到什么作用呢?

@InitBinder

Annotation that identifies methods which initialize the {@link org.springframework.web.bind.WebDataBinder} which will be used for populating command and form object arguments of annotated handler methods. Such init-binder methods support all arguments that {@link RequestMapping} supports, except for command/form objects and corresponding validation result objects. Init-binder methods must not have a return value; they are usually declared as {@code void}.

作用:注册属性编辑器,对HTTP请求参数进行处理,再绑定到对应的接口,比如格式化的时间转换等。应用于单个@Controller类的方法上时,仅对该类里的接口有效。与@ControllerAdvice组合使用可全局生效。

 

示例:

 

@ExceptionHandler

作用:统一异常处理,也可以指定要处理的异常类型

示例:

 

@ModelAttribute

作用:绑定数据

示例:

 

在接口中获取前面绑定的参数:

 

 


完整示例代码:

 

测试接口:

 


高阶应用--格式化时间转Date

使用@ControllerAdvice + @InitBinder,可将http请求参数中的时间自动转换成Date类型。

 

自定义的时间类型转换器:

 

扩展:

@RestControllerAdvice =  @ControllerAdvice +  @ResponseBody




    原文始发于微信公众号(猿生物语):Spring进阶之@ControllerAdvice与统一异常处理