当前位置: 首页 > news >正文

SpringBoot 拦截org.thymeleaf.exceptions.TemplateInputException异常

SpringBoot 拦截thymeleaf异常

org.thymeleaf.exceptions.TemplateInputException异常

org.thymeleaf.exceptions.TemplateProcessingE
xception: Could not parse as each: "message : xxx " (template: “xxxx” - line xx, col xx)

thymeleaf异常复现

你是故意的,还是不小心的 ----我是故意的

image.png

成功拦截,使用自定义试图,捕获主要信息,减去一大推报错代码,只显示正常信息,显得优雅

微信图片_20230831091552.png
微信图片_20230831091552.png

为什么不生效

首先应该知道 @ControllerAdvice 是拦截不成功的,百世(试)不得其姐(解),正常来说,异常是会走下面这一行代码的

@ControllerAdvice
public class SysGlobalExceptionHandler<T> extends BasicController<Class<?>>{@ExceptionHandler(Exception.class)public ResponseEntity<Object> exception(Throwable e) {// 处理异常return ResponseEntity.status(this.response.getStatus()).body("Exception未定义异常" + e.getMessage());}
}

但是他是不正常的(因为拦截不到),为什么,我也不知道,但是AI是这么说的:@ControllerAdvice只能处理通过控制器抛出的异常,并不能处理其他组件抛出的异常。如果需要处理其他组件的异常,需要使用其他的异常处理机制。
听君一席话,如菜鸟开大

怎么实现拦截生效呢

当然是重新实现 ErrorController接口了

public Object errorHandle(){//判断状态码是500if (this.response.getStatus() == HttpStatus.INTERNAL_SERVER_ERROR.value()) {// 获取异常信息Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception");// 判断是不是模板异常if (throwable.getCause() instanceof TemplateInputException) {//这里其实也可以是TemplateInputException,throwable.getCause() instanceof TemplateInputException也可以是TemplateProcessingException,最终都是抛出TemplateProcessingException异常TemplateProcessingException templateProcessingException = (TemplateProcessingException) throwable.getCause();ParseException parseException = (ParseException) templateProcessingException.getCause();//这里就是自定义逻辑了this.msgFormat("模板出现异常 %s ", parseException.getLocalizedMessage());modelAndView.setViewName("err");// return this.Output(throwable.getClass());//return ResponseEntity.status(this.response.getStatus()).body(parseException.getLocalizedMessage());}
}// this.response就是抛出原来的结果,就比如你写的逻辑没有成功拦截到500状态码的其他异常,是啥就显示啥
return this.response;}

这样就完成实现拦截到thymeleaf的异常,@ControllerAdvice处理不了的异常可以使用ErrorController来处理,耶稣也拦不住,鲁某说的

微信图片_20230831091552.png

有很多东西是后知后觉的,一年前我可能不知道怎么处理,只能去处理业务,避免出现这种异常,时间久了,好多知识点就慢慢领悟了。(多动手)

微信图片_20230831091607.png

http://www.lryc.cn/news/161757.html

相关文章:

  • Qt之随机数
  • UWB学习——day2
  • 使用 multiprocessing 多进程处理批量数据
  • React 与 TS 结合使用时组件传参总结
  • 性能炸裂c++20协程+iocp/epoll,超轻量高性能异步库开发实战
  • 自定义Dynamics 365实施和发布业务解决方案 - 4. 自动化业务流程
  • Lua03——开发环境搭建
  • Redis 非关系型数据库 配置与优化
  • docker笔记8:Docker网络
  • C# 共享项目的应用
  • Linux之基于HTTPS的静态网站
  • ChatGPT在机器人护理和老年人支持中的潜在角色如何?
  • LeetCode:261. 以图判树 - Python
  • Linux目录结构和远程使用
  • 淘宝销量展示方式变更背后的逻辑
  • Bytebase 和 GitLab 签署 Technology Partner 技术合作伙伴协议
  • 杭州高职画室哪家好?如何选择高职画室?高职美术学习选哪家画室?
  • 原型模式简介
  • SpringMVC(一)
  • 树的基本概念和存储结构
  • 深圳企业制作宣传片群体定位的重要性
  • 2309亚当arsd的11.1版本
  • spring---第七篇
  • 编程要搞明白的东西(二)
  • 检索与毒害 —— 对抗人工智能供应链攻击
  • Linux 禁止用户或 IP通过 SSH 登录
  • 14.Redis 主从复制
  • 常见的图像格式介绍:RAW、RGB、YUV
  • 极简极速-Bitset (bitmap)实现考勤打卡场景
  • word如何插入图片?3种常用的方法