44、基于 AOP 的错误处理,相当于异常拦截处理

基于 springboot 自动配置的 spring mvc 错误处理,就是演示项目报错后,跳转到自定义的错误页面

★ 两种错误处理方式

方式一: 基于Spring Boot自动配置的错误处理方式,只要通过属性文件即可配置错误处理行为。
提供自定义的错误页面即可。
上一篇:通过配置文件自定义错误页面

方式二: 使用@ResponseStatus、@ExceptionHandler、@ControllerAdvice等基于AOP的异常处理机制,
这是直接基于Spring MVC异常处理机制进行错误处理。

@RestControllerAdvice是什么:
@RestControllerAdvice是一个组合注解,由@ControllerAdvice、@ResponseBody组成,

而@ControllerAdvice 继承了@Component,因此@RestControllerAdvice本质上是个Component,
用于定义@ExceptionHandler,@InitBinder和@ModelAttribute方法,

适用于所有使用@RequestMapping方法。

★ 基于Spring MVC AOP的错误处理机制

个人理解:相当于 异常拦截处理

它可以在程序出现错误时,增加自己的错误修复处理代码,
当然也可以最终根据错误码返回对应的视图页面或JSON响应。

——这种方式的功能其实比基于Spring Boot自动配置的错误处理要更强大、灵活,只不过比较麻烦一些而已。


- @ResponseStatus:可用于修饰指定异常类或异常处理方法。
                   就是将异常类或异常处理方法与错误码和错误信息对应起来。

- @ExceptionHandler:该注解修饰的方法相当于一个AfterThrowing Advice,它专门用于处理异常。
                该方法在处理异常时,就可以对异常进行一些自定义的修复。

- @ControllerAdvice(为错误生成视图页面)
- 或@RestControllerAdvice(生成JSON响应):该注解修饰的类相当于Aspect。

代码演示

回顾之前的错误处理:是返回一个动态错误页面
44、基于 AOP 的错误处理,相当于异常拦截处理_第1张图片

现在通过写一个异常处理类,拦截该异常并进行处理,返回对应的异常信息
(但是代码好像没明确表示能拦截什么异常,感觉是所有异常都拦截)

拦截到了抛出的异常,但是没有错误码,然后程序给分配一个500的错误码。

44、基于 AOP 的错误处理,相当于异常拦截处理_第2张图片

如图可以看到 基于 AOP 的错误处理生效了。不再是返回一个错误的动态页面,而是返回这个json数据响应。

和返回视图页面相比,这个@RestControllerAdvice修饰的异常处理类的作用就是我们可以在这个异常处理的类里面针对异常写一些处理的代码。

  • @ControllerAdvice(为错误生成视图页面用这个注解)
  • 或@RestControllerAdvice(生成JSON响应用这个注解):该注解修饰的类相当于Aspect。

图中这个 500 不知道是属于 HttpStatus.INTERNAL_SERVER_ERROR 生成的自定义错误码,还是原本就有的。
44、基于 AOP 的错误处理,相当于异常拦截处理_第3张图片

问题:

不明白为什么没有获取到原有的错误码,原本不就有500的状态码吗。暂时记录下。
44、基于 AOP 的错误处理,相当于异常拦截处理_第4张图片

你可能感兴趣的:(springboot,spring,boot)