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;
}
}