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-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)