Manejo de excepciones globales Springboot2.X en el combate del proyecto

Manejo de excepciones globales en el proyecto de educación en línea SpringBoot2.x

Introducción: Explicar el manejo de excepciones globales de SpringBoot2.X

¿Por qué configurar excepciones globales?

  • No apto para escenario de error de servidor global 1/0, puntero nulo, etc.

Beneficios de la configuración

  • Página de error unificada o código de error
  • más fácil de usar

¿Cómo Springboot2.X configura excepciones globales en el proyecto?

  • Anota la clase

    • @ControllerAdvice, si necesita devolver datos json, el método debe agregar @ResponseBody
    • @RestControllerAdvice, devuelve datos json de forma predeterminada, el método no necesita agregar @ResponseBody
  • método para agregar un controlador

    • Detecte excepciones globales, maneje todas las excepciones desconocidas
    • @ExceptionHandler(valor=Excepción.clase)

capa de controlador

@RestController
@RequestMapping("api/v1/test")
public class TestController {
    
    
 @GetMapping("list")
    public JsonData testExt(){
    
    
        int i =1 /0;
        return JsonData.buildSuccess("");
    }
}

capa de mango

/**
 * 标记这是一个异常处理
 */
@RestControllerAdvice  //标记用于处理异常
//@ControllerAdvice
public class CustomExHandle {
    
    
    //处理json
    @ExceptionHandler(value = Exception.class)
    Object handleException(Exception e, HttpServletRequest request){
    
    
       return JsonData.buildError("服务端出问题",-2);
    }
}

@RestControllerAdvice y @ControllerAdvice para manejar datos json y no json


SpringBoot2.x página de retorno de excepción global personalizada

Use SpringBoot para personalizar las páginas de excepción y error para saltar al combate real

Para volver a la interfaz de excepción personalizada, debe introducir las dependencias de thymeleaf (no es obligatorio, no es necesario si se trata de una interfaz html simple)

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

Crear página de error error.html

página html

<!DOCTYPE html>
<!--在使用时需添加 xmlns:th="http://www/thymeleaf.org"-->
<html lang="en" xmlns:th="http://www/thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
这是一个自定义异常的界面

<!--获取到报错的信息 等,按需求获取所需的报错信息
    注:msg必须与hanlde层中自定义的一致
    e.getMessage() :报错的信息
    e.getClass()   :报错的类型
-->
<p th:text="${msg}"></p>
</body>
</html>

capa de mango

/**
 * 标记这是一个异常处理
 */
//@RestControllerAdvice  //标记用于处理异常
@ControllerAdvice
public class CustomExHandle {
    
    
//    //处理json
//    @ExceptionHandler(value = Exception.class)
//    Object handleException(Exception e, HttpServletRequest request){
    
    
//       return JsonData.buildError("服务端出问题",-2);
//    }

    @ExceptionHandler(value = Exception.class)
    Object handleException(Exception e, HttpServletRequest request){
    
    
        ModelAndView modelAndView =new ModelAndView();
        modelAndView.setViewName("error.html");
        modelAndView.addObject("msg",e.getMessage());
        System.out.println(e.getMessage());
        return modelAndView;
    }
}

Supongo que te gusta

Origin blog.csdn.net/m0_49969111/article/details/118694253
Recomendado
Clasificación