浅谈SpringBoot如何正确拦截thymeleaf异常

 更新时间:2023年09月07日 09:27:42   作者:你行你上  
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 是拦截不成功的,百世(试)不得其姐(解),正常来说,异常是会走下面这一行代码的

@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(){
    //判断状态码是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来处理,耶稣也拦不住,鲁某说的

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

到此这篇关于浅谈SpringBoot如何正确拦截thymeleaf异常的文章就介绍到这了,更多相关SpringBoot拦截thymeleaf异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Tomcat内存溢出分析及解决方法

    Tomcat内存溢出分析及解决方法

    堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的,本文将详细介绍Tomcat内存溢出,需要了解更多的朋友可以参考下
    2012-11-11
  • Java中BigDecimal类的add()的使用详解

    Java中BigDecimal类的add()的使用详解

    这篇文章主要介绍了Java中BigDecimal类的add()的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • MyBatis 自动更新时间的方法实现

    MyBatis 自动更新时间的方法实现

    本文主要介绍了MyBatis 自动更新时间的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • java代码实现俄罗斯方块

    java代码实现俄罗斯方块

    这篇文章主要为大家详细介绍了java代码实现俄罗斯方块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • SpringBoot无法使用jkd8问题的解决方法

    SpringBoot无法使用jkd8问题的解决方法

    这篇文章主要介绍了SpringBoot无法使用jkd8问题的解决方法,文中通过图文结合的形式给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-12-12
  • jackson 如何将实体转json json字符串转实体

    jackson 如何将实体转json json字符串转实体

    这篇文章主要介绍了jackson 实现将实体转json json字符串转实体,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • mybatis中bind标签和concat的使用说明

    mybatis中bind标签和concat的使用说明

    这篇文章主要介绍了mybatis中bind标签和concat的使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Java调用高德地图API根据详细地址获取经纬度详细教程

    Java调用高德地图API根据详细地址获取经纬度详细教程

    写了一个经纬度相关的工具,分享给有需求的小伙伴们,下面这篇文章主要给大家介绍了关于Java调用高德地图API根据详细地址获取经纬度,文中通过图文以及代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • springboot整合websocket实现群聊思路代码详解

    springboot整合websocket实现群聊思路代码详解

    通过springboot引入websocket,实现群聊,通过在线websocket测试进行展示。本文重点给大家介绍springboot整合websocket实现群聊功能,代码超级简单,感兴趣的朋友跟随小编一起学习吧
    2021-05-05
  • springboot学习笔记之 profile多环境配置切换的实现方式

    springboot学习笔记之 profile多环境配置切换的实现方式

    这篇文章主要介绍了springboot profile多环境配置切换的实现方式,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07

最新评论