@ControllerAdvice
从名字上可以看出大体意思是控制器增强。
Spring@ControllerAdvice
原始码中有关的注解如下:
对于声明{@link ExceptionHandler @ExceptionHandler},{@link InitBinder @InitBinder}或{@link ModelAttribute @ModelAttribute}方法以在多个{@code @Controller}类之间共享的类,专门使用{@link Component @Component} 。
@ControllerAdvice
是一个特殊的@Component
,用于标识一个类,用于定义@ExceptionHandler
,@InitBinder
和@ModelAttribute
方法。适用于所有使用@RequestMapping
方法。
@InitBinder
注释,用于标识初始化{@link org.springframework.web.bind.WebDataBinder}的方法,这些方法将用于填充带注释的处理程序方法的命令和表单对象参数。此类init-binder方法支持{@link RequestMapping}支持的所有参数,但命令/表单对象和相应的验证结果对象除外。初始化绑定器方法不能具有返回值;它们通常被声明为{@code void}。
作用:注册属性编辑器,对HTTP请求参数进行处理,再绑定到对应的接口,某些格式化的时间转换等。替换@Controller类的方法上时,仅该类里的接口有效。与@ControllerAdvice组合使用可合并的能力。
1 |
|
@ExceptionHandler(🌟)
作用:统一异常处理,也可以指定要处理的异常类型
示例:
1 |
|
@ModelAttribute
作用:绑定数据
示例:
1 |
|
在接口中获取前面绑定的参数:
1 |
|
完整示例代码:
1 | import org.slf4j.Logger; |
测试接口:
1 |
|
高阶应用
格式化时间转日期
使用@ControllerAdvice
+ @InitBinder
,可将http请求参数中的时间自动转换成日期类型。
1 |
|
自定义的时间类型转换器:
1 | import org.springframework.core.convert.converter.Converter; |
扩展:
@RestControllerAdvice
= @ControllerAdvice
+ @ResponseBody