• SpringBoot配置全局异常处理


    目录

    前言

    相关概念

    @ControllerAdvice

    @ExceptionHandler

    配置全局异常处理

    1.新建SpringBoot项目

     2.Maven依赖

    3. 统一返回格式工具类

    4.构建错误异常

    5.启动项目,请求接口

    6.配置全局异常

    7.重启项目,验证全局异常处理

    总结


    前言

    在项目开发过程中,我们经常会遇到程序异常,这个时候我们常常会使用try...catch..,今天小小渔夫就介绍下SpringBoot中配置全局异常处理,主要以@ControllerAdvice+

    @ExceptionHandler的方式来配置全局异常处理。如有疑问,烦请提出,虚心改之:)

    相关概念

     @ControllerAdvice

    顾名思义,@ControllerAdvice就是@Controller 的增强版,@ControllerAdvice注解是Spring3.2中新增的注解。@ControllerAdvice主要用来处理全局数据,一般搭配@ExceptionHandler、@ModelAttribute以及@InitBinder使用。

     @ExceptionHandler

    @ExceptionHandler注解我们一般是用来自定义异常的。 可以认为它是一个异常拦截器(处理器)。@ExceptionHandler注解标注的方法:用于捕获Controller中抛出的不同类型的异常,从而达到异常全局处理的目的;

    配置全局异常处理

    1.新建SpringBoot项目

     2.Maven依赖

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <parent>
    6. <groupId>org.springframework.bootgroupId>
    7. <artifactId>spring-boot-starter-parentartifactId>
    8. <version>2.7.5version>
    9. <relativePath/>
    10. parent>
    11. <groupId>com.inchlifcgroupId>
    12. <artifactId>ExceptionDemoartifactId>
    13. <version>0.0.1-SNAPSHOTversion>
    14. <name>ExceptionDemoname>
    15. <description>Demo project for Spring Bootdescription>
    16. <properties>
    17. <java.version>1.8java.version>
    18. properties>
    19. <dependencies>
    20. <dependency>
    21. <groupId>org.springframework.bootgroupId>
    22. <artifactId>spring-boot-starterartifactId>
    23. dependency>
    24. <dependency>
    25. <groupId>org.springframework.bootgroupId>
    26. <artifactId>spring-boot-starter-testartifactId>
    27. <scope>testscope>
    28. dependency>
    29. <dependency>
    30. <groupId>org.apache.httpcomponentsgroupId>
    31. <artifactId>httpcoreartifactId>
    32. dependency>
    33. <dependency>
    34. <groupId>org.springframework.bootgroupId>
    35. <artifactId>spring-boot-starter-webartifactId>
    36. dependency>
    37. dependencies>
    38. <build>
    39. <plugins>
    40. <plugin>
    41. <groupId>org.springframework.bootgroupId>
    42. <artifactId>spring-boot-maven-pluginartifactId>
    43. plugin>
    44. plugins>
    45. build>
    46. project>

    3. 统一返回格式工具类

    1. package com.inchlifc.exceptiondemo.util;
    2. import org.apache.http.HttpStatus;
    3. import java.util.HashMap;
    4. import java.util.Map;
    5. /**
    6. * @author inchlifc
    7. */
    8. public class Result extends HashMap {
    9. private static final long serialVersionUID = 1L;
    10. public Result(){
    11. put("code",0);
    12. put("msg","success");
    13. }
    14. public static Result error() {
    15. return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
    16. }
    17. public static Result error(String msg) {
    18. return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
    19. }
    20. public static Result error(int code, String msg) {
    21. Result r = new Result();
    22. r.put("code", code);
    23. r.put("msg", msg);
    24. return r;
    25. }
    26. public static Result ok(String msg) {
    27. Result r = new Result();
    28. r.put("msg", msg);
    29. return r;
    30. }
    31. public static Result ok(Map map) {
    32. Result r = new Result();
    33. r.putAll(map);
    34. return r;
    35. }
    36. public static Result ok() {
    37. return new Result();
    38. }
    39. @Override
    40. public Result put(String key, Object value) {
    41. super.put(key, value);
    42. return this;
    43. }
    44. }

    4.构建错误异常

    1. @RestController
    2. @RequestMapping("/test")
    3. public class TestController {
    4. @GetMapping("/getException")
    5. public Result getException(){
    6. int a = 10;
    7. int b = 0;
    8. System.out.println(a/b);
    9. return Result.ok();
    10. }
    11. }

    5.启动项目,请求接口

    所有配置好之后,我们开始启动项目,前端调用测试接口,会发现,控制台报错。如下图:

     

    我们从控制台可以看到,此异常为算术异常:即除数不能为0,接下来我们配置全局异常处理,并自定义异常返回结果。 

    6.配置全局异常

    1. package com.inchlifc.exceptiondemo.exception;
    2. import com.inchlifc.exceptiondemo.util.Result;
    3. import org.springframework.web.bind.annotation.ExceptionHandler;
    4. import org.springframework.web.bind.annotation.RestControllerAdvice;
    5. @RestControllerAdvice
    6. public class GlobalExceptionHandler {
    7. @ExceptionHandler(ArithmeticException.class)
    8. public Result arithmeticExceptionHandler(ArithmeticException e){
    9. return Result.error(10001,e.getMessage());
    10. }
    11. }

    @RestControllerAdvice注解是@ControllerAdvice注解的扩展(@RestControllerAdvice=@ControllerAdvice+@ResponseBody),返回值自动为JSON的形式。
    @ExceptionHandler(ArithmeticException.class):标记在方法上表示该方法捕获哪些异常,小括号的形参就是要捕获的异常类

    7.重启项目,验证全局异常处理

    总结

    以上就是全局异常处理的配置,如有错误,烦请指出,谢谢。 

  • 相关阅读:
    Dokcer常用命令
    百面深度学习-循环神经网络
    websocket flv 客户端解封包
    有意识的神经网络之对比网络层和后意识层 加入em
    童装CPC认证检测哪些内容?童装上架亚马逊美国站CPC认证办理
    程序验证Jackson反序列化的规则、Jackson序列化与反序列化关键方法程序详细分析
    【附源码】Python计算机毕业设计面向智慧课堂的教学过程管理系统
    tomcat配置jdk环境
    【Algorithm】GPLT L3-020 至多删三个字符
    数据科学家是不是特有前途的职业?
  • 原文地址:https://blog.csdn.net/cx243698/article/details/127670946