SpringBoot 如何正确拦截thymeleaf异常

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异常复现

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

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

为什么不生效

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

java 复制代码
@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接口了

java 复制代码
public Object errorHandle(){
    //判断状态码是500
    if (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来处理,耶稣也拦不住,鲁某说的

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

相关推荐
码出财富1 小时前
SpringBoot 内置的 20 个高效工具类
java·spring boot·spring cloud·java-ee
座山雕~4 小时前
Springboot
android·spring boot·后端
韩立学长5 小时前
基于Springboot流浪动物救助系统o8g44kwc(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
qq_318121596 小时前
互联网大厂Java面试故事:在线教育微服务架构、缓存优化与AI智能教学全流程解析
java·spring boot·redis·微服务·kafka·spring security·在线教育
大猫和小黄7 小时前
Java异常处理:从基础到SpringBoot实战解析
java·开发语言·spring boot·异常
hero.fei7 小时前
kaptcha 验证码生成工具在springboot中集成
java·spring boot·后端
w***76558 小时前
存储技术全景:从基础原理到未来趋势
spring boot·后端·mybatis
Miss_Chenzr10 小时前
Springboot企业人事管理系统mi130(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·数据库·spring boot
风景的人生11 小时前
springboot项目用maven插件打包时候报错
java·spring boot·maven
vx_bisheyuange11 小时前
基于SpringBoot的经方药食服务平台
java·spring boot·后端·毕业设计