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