springmvc源码学习(三十)@ControllerAdvice 全局异常处理
2022/1/2 12:37:50
本文主要是介绍springmvc源码学习(三十)@ControllerAdvice 全局异常处理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
- 前言
- 一、示例
- 二、原理
前言
在请求到达了 DispatcherServlet 的处理流程,进入 doDispatch( ) 以及后续流程处理业务的过程中出现异常,会进入到 processDispatchResult( ) 处理异常,此时,如果定义了@ControllerAdvice、@RestControllerAdvice 对应的方法能够处理该异常,则进入对应的方法进行异常处理。一、示例
1、返回值结构:
@Data @ToString(callSuper = true) @Accessors(chain = true) @AllArgsConstructor public class ResponseEntity<T> implements Serializable { /** * 状态码 */ protected Integer status; /** * 提示信息 */ protected String msg; /** * 错误描述 */ protected String desc; /** * 返回数据 */ protected T data; public ResponseEntity() { this.message = "操作成功"; this.status = 200; } }
2、全局异常处理
定义一些处理异常的方法,可以添加项目中自定义的一些异常
@RestControllerAdvice @Component @Slf4j public class CustomExceptionAdivsor { @ExceptionHandler(value = MethodArgumentNotValidException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public ResponseEntity to400(MethodArgumentNotValidException e) { ResponseEntity responseEntity = new ResponseEntity() .setStatus(HttpStatus.BAD_REQUEST.value()) .setDesc(e.getMessage()); return responseEntity; } @ExceptionHandler(value = AuthorizationException.class) @ResponseStatus(HttpStatus.FORBIDDEN) public ResponseEntity to403(AuthorizationException e) { ResponseEntity responseEntity = new ResponseEntity() .setStatus(HttpStatus.FORBIDDEN.value()) .setDesc(e.getMessage()); return responseEntity; } @ExceptionHandler(RuntimeException.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ResponseEntity to500(RuntimeException e) { ResponseEntity responseEntity = new ResponseEntity() .setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()) .setDesc(e.getMessage()); return responseEntity; } @ExceptionHandler(value = Throwable.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ResponseEntity to500(Throwable throwable) { ResponseEntity responseEntity = new ResponseEntity() .setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()) .setDesc(throwable.getMessage()); return responseEntity; } }
3、@RestControllerAdvice
@RestControllerAdvice 包含了 @ControllerAdvice 和 @ResponseBody
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @ControllerAdvice @ResponseBody public @interface RestControllerAdvice {
二、原理
在上一篇文章中分析过了
这篇关于springmvc源码学习(三十)@ControllerAdvice 全局异常处理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27数据结构与算法面试题详解及练习
- 2024-12-27网络请求面试题详解与实战
- 2024-12-27数据结构和算法面试真题详解与实战教程
- 2024-12-27网络请求面试真题解析与实战教程
- 2024-12-27数据结构和算法大厂面试真题详解与实战指南
- 2024-12-27TS大厂面试真题解析与应对策略
- 2024-12-27TS大厂面试真题详解与解析
- 2024-12-27网站安全入门:如何识别和修复漏洞
- 2024-12-27SQL注入基础教程
- 2024-12-27初学者指南:理解和修复跨域漏洞