Spring Boot-Configure captura de excepción global

Enlace del directorio de resumen: directorio de blogs de tecnología común de desarrollo de Spring Boot

Este artículo solo configura una captura de excepción global simple, si es necesario, se pueden desarrollar otras excepciones y excepciones personalizadas de acuerdo con la situación real.

salto de página web

La estructura del proyecto es la siguiente:

MyExceptionHandler.java

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

@ControllerAdvice
public class MyExceptionHandler {

	private static final String MY_ERROR_VIEW = "error";

	@ExceptionHandler(value = Exception.class)
	public Object errorHandler(HttpServletRequest request, HttpServletResponse response, Exception e) throws Exception {
		e.printStackTrace();

		ModelAndView mav = new ModelAndView();
		mav.addObject("exception", e);
		mav.addObject("url", request.getRequestURL());
		mav.setViewName(MY_ERROR_VIEW);
		return mav;
	}

}

error.html

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title>错误页面</title>
</head>
<body>

	<h1 style="color: red">发生错误:</h1>
	<div th:text="${url}"></div>
	<div th:text="${exception.message}"></div>

</body>
</html>

Clase de prueba de excepción ErrorController.java 

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 异常测试类
 */
@Controller
@RequestMapping(value = "err")
public class ErrorController {

	@RequestMapping(value = "/error")
	String error() {
		int a = 1 / 0;
		return "aaa";
	}

}

Efecto de ejecución:

Formulario Ajax

ErrorController.java

@Controller
@RequestMapping(value = "err")
public class ErrorController {
	@RequestMapping(value = "/getAjaxPage")
	String getAjaxPage() {
		return "ajaxpage";
	}
	@RequestMapping(value = "/getAjaxerror")
	@ResponseBody
	Result getAjaxerror() {
		System.out.println(1/0);
		return Result.ok("ok");
	}
}

AjaxExceptionHandler.java (comente @ControllerAdvice y @ExceptionHandler en MyEcxceptionHandler.java, cuando use AjaxExceptionHandler.java, comente @RestControllerAdvice y @ExceptionHandler en MyEcxceptionHandler.java) Nota:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import com.xiangty.common.Result;

@RestControllerAdvice
public class AjaxExceptionHandler {
	@ExceptionHandler(value = Exception.class)
	public Result errorHandler(HttpServletRequest request, HttpServletResponse response,Exception e) throws Exception {
		e.printStackTrace();
		return Result.error(e.getMessage());
	}
}

Agregue JS y ajaxpage.html contenido de front-end

ajaxpage.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8" />
    <title>Ajax页面</title>
    <script src="../static/js/jquery-3.3.1.js"></script>
</head>
<body>

<input type="button" value="点击发送ajax请求" onclick="query()"/>
<br>
<div id="context"></div>


<script>
    function query() {
        $.ajax({
            url: "/err/getAjaxerror",
            type: "POST",
            async: false,
            success: function (response) {
            	console.info(response);
                if (response.status == 10000) {
                    $("#context").text("成功");
                } else {
                    $("#context").text("失败,错误信息:"+response.data);
                }
            },
            error: function(response){
            	$("#context").text("失败,错误信息:"+response.data);
            }
        });
    }
</script>

</body>
</html>

Agregue WebConfig.java (si no lo agrega, se informará una excepción 404 cuando html haga referencia a js)

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
@Configuration
public class WebConfig implements WebMvcConfigurer {
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //将所有/static/** 访问都映射到classpath:/static/ 目录下
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }
}

 

Haga clic en la página para enviar una solicitud ajax

Compatible con salto de página web y formato Ajax

CommonExceptionHandler.java reemplaza el AjaxExceptionHandler y MyExceptionHandler originales

CommonExceptionHandler.java, juzgue si el contenido del contenido de la solicitud está en forma de Ajax y luego use los dos modos anteriores de verificación de ruta.

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.ModelAndView;

import com.xiangty.common.Result;

@RestControllerAdvice
public class CommonExceptionHandler {

	private static final String MY_ERROR_VIEW = "error";

	@ExceptionHandler(value = Exception.class)
	public Object errorHandler(HttpServletRequest request, HttpServletResponse response, Exception e) throws Exception {
		e.printStackTrace();
		if(request.getHeader("X-Requested-With") != null 
				&& "XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
			// Ajax形式
			return Result.error(e.getMessage());
		} else {
			// web页面跳转
			ModelAndView mav = new ModelAndView();
			mav.addObject("exception", e);
			mav.addObject("url", request.getRequestURL());
			mav.setViewName(MY_ERROR_VIEW);
			return mav;
		}
	}

}

 

Enlace del directorio de resumen: directorio de blogs de tecnología común de desarrollo de Spring Boot

Supongo que te gusta

Origin blog.csdn.net/qq_33369215/article/details/90412391
Recomendado
Clasificación