当前位置:网站首页>8. Unified exception handling (controller notifies @ControllerAdvice global configuration class, @ExceptionHandler handles exceptions uniformly)
8. Unified exception handling (controller notifies @ControllerAdvice global configuration class, @ExceptionHandler handles exceptions uniformly)
2022-07-31 02:39:00 【一个偷笑】

- SpringBoot设计,如果出现错误404或500,Automatically call under a specific pathhtml页面(Paths and names are specific)./templates/error/404.html、/templates/error/500.html.This page is automatically called when there is an error in the program.
- But the error has async request error,Also want to log at the same time.Then use the unified processing method,即全局配置.使用HomeController,Add a request to get the error page,手动重定向路径.
@RequestMapping(path = "/error", method = RequestMethod.GET)
public String getErrorPage() {
return "/error/500";
}
在Controller下新建adviceNotification configuration package,新建ExceptionAdvice.用到两个注解:@ControllerAdvice,@ExceptionHandler.
- 是Controller全局配置类,Not to anyControllerdo the configuration again,can be done uniformlyController的全局配置.@ControllerAdvice用来修饰类.
- 异常处理方案**@ExceptionHandler**、绑定数据方案**@ModelAttribute**、绑定参数方案**@DataBinder**. They are both used to decorate methods.
- 这里只演示,统一处理异常(@ExceptionHandler)
// 是Controller全局配置类,Not to anyControllerdo the configuration again,can be done uniformlyController的全局配置[email protected]用来修饰类.
// 异常处理方案@ExceptionHandler、绑定数据方案@ModelAttribute、绑定参数方案@DataBinder. They are both used to decorate methods.
// 这里只演示,统一处理异常(@ExceptionHandler)
@ControllerAdvice(annotations = Controller.class) // 限定注解@Controller,Otherwise the component scans allbean
public class ExceptionAdvice {
private static final Logger logger = LoggerFactory.getLogger(ExceptionAdvice.class);
@ExceptionHandler({
Exception.class})// 处理哪些异常?Exception是所有异常的父类,All exceptions are handled
// 有异常controllerwill passException
public void handleException(Exception e, HttpServletRequest request, HttpServletResponse response) throws IOException {
// 记录日志
logger.error("服务器发生异常:" + e.getMessage());//Unusual summary
for (StackTraceElement element : e.getStackTrace()) {
//Record the information of all stacks of exceptions
logger.error(element.toString());
}
// 给浏览器响应
// Depends what the request is,Want the server to return the web pagehtml/异步请求JSON(xml).Get it from the request header.
String xRequestedWith = request.getHeader("x-requested-with");
if ("XMLHttpRequest".equals(xRequestedWith)) {
// 异步请求
response.setContentType("application/plain;charset=utf-8");
PrintWriter writer = response.getWriter();// 输出流
writer.write(CommunityUtil.getJSONString(1,"服务器异常!"));// 输出JSON字符串
}else{
// 请求html,重定向到错误页面
response.sendRedirect(request.getContextPath() + "/error");
}
}
}
Click on the Unconfigured page to appear404,并记录日志:
点击消息,浏览器请求页面,服务端出错500,并记录日志:
发送私信,异步请求,服务端出错,返回JSON字符串,并记录日志:
边栏推荐
- YOLOV5学习笔记(二)——环境安装+运行+训练
- LeetCode 每日一题 2022/7/25-2022/7/31
- The comprehensive result of the case statement, do you know it?[Verilog Advanced Tutorial]
- print task sorting js od huawei
- LeetCode 1161 最大层内元素和[BFS 二叉树] HERODING的LeetCode之路
- Live Preview | KDD2022 Doctoral Dissertation Award Champion and Runner-up Dialogue
- 10 权限介绍
- AI中的数学思想
- The difference between link and @import
- StringJoiner详解
猜你喜欢
随机推荐
自动化办公案例:如何自动生成期数据?
Observer mode (1)
SQL注入 Less47(报错注入) 和Less49(时间盲注)
221. Largest Square
try-catch中含return
The application of AI in the whole process of medical imaging equipment
php 网站的多语言设置(IP地址区分国内国外)
Live Preview | KDD2022 Doctoral Dissertation Award Champion and Runner-up Dialogue
Manchester City confuses fans with smart scarf that detects emotions
mmdetection训练一个模型相关命令
经典链表OJ强训题——快慢双指针高效解法
Go 项目实战-获取多级分类下的全部商品
修改未正确放入沙盒造成苹果兼容性问题
基于opencv实现人脸检测
User interaction + formatted output
16. Registration Center-consul
SQL注入 Less54(限制次数的SQL注入+union注入)
【银行系列第一期】中国人民银行
[1153] The boundary range of between in mysql
CentOS7下mysql5.7.37的安装【完美方案】









