SpringBoot集成Beetl后统一处理页面异常的方法
作者:滕冲 时间:2023-11-10 19:57:55
背景
SpringBoot集成Beetl后如果页面出现异常会将出现异常之前的页面输出到客户端,但是由于页面不完整会导致用户看到的页面错乱或者空白,如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
在控制台可以看到
>>11:11:47:该方法未注册(FUNCTION_NOT_FOUND):err 位于8行 资源:modular/sys/login/login.html
5| <title>Title</title>
6|</head>
7|<body>
8| ${err()}
9|</body>
10|</html>
我们一般希望当出现异常时返回异常提示页面而不是不完整的页面。
设置ErrorHandler
Beetl默认发生页面异常时不对异常进行抛出,在文档中我们可以看到
2.2.3版本以后,新增加org.beetl.ext.web.WebErrorHandler,可以在web开发的时候在页面输出提示信息,在产品模式下在后台输出提示信息(通过配置属性ESOURCE.autoCheck= true来认为是开发模式),仅仅需要配置如下:
ERROR_HANDLER = org.beetl.ext.web.WebErrorHandler
所以这里设置ErrorHandler,使用Beetl提供的org.beetl.ext.web.WebErrorHandler
BeetlConfiguration beetlConfiguration = new BeetlConfiguration();
beetlConfiguration.setErrorHandler(new WebErrorHandler());
再次访问页面可以看到页面中显示了调用栈
根据环境做不同处理
在实际应用中,开发环境我们希望看到异常信息,生产环境希望看到的是统一的异常提示页面,而不是用户看不懂的代码信息,在org.beetl.ext.web.WebErrorHandler中可以看到
//判断是不是开发者模式,如果不是调用父类方法(默认输出控制台)
if (!Boolean.valueOf(e.gt.getConf().getProperty("RESOURCE.autoCheck"))){
super.processExcption(e, writer);
}
这里通过配置属性ESOURCE.autoCheck= true来认为是开发模式,但是通过BeetlConfiguration.setConfigProperties设置ESOURCE.autoCheck=false后依然无效(模板不会热加载,但是这边依旧当做开发环境),也有可能是我设置不对的原因。
所以通过自定义WebErrorHandler解决此问题,通过判断spring.spring.active去判断当前环境;也可以抛出异常到全局异常统一处理。
来源:https://juejin.im/post/5d5e04ede51d45620c1c53d1
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
c#实现简单控制台udp异步通信程序示例
Java异常处理之try...catch...finally详解
![](https://img.aspxhome.com/file/2023/5/62405_0s.png)
SpringBoot封装响应数据实现过程详解
![](https://img.aspxhome.com/file/2023/5/88215_0s.png)
Java反射机制的学习总结
![](https://img.aspxhome.com/file/2023/5/113375_0s.png)
Spring session 获取当前账户登录数的实例代码
c# wpf如何使用Blend工具绘制Control样式
![](https://img.aspxhome.com/file/2023/5/69235_0s.gif)
关于使用Mybatisplus自带的selectById和insert方法时的一些问题
Android 仿微信发动态九宫格拖拽、删除功能
![](https://img.aspxhome.com/file/2023/9/93279_0s.jpg)
Android自定义ImageView实现自动放大缩小动画
简单聊聊c# 事件
![](https://img.aspxhome.com/file/2023/9/78189_0s.png)
Android判断设备网络连接状态及判断连接方式的方法
C++实现softmax函数的面试经验
![](https://img.aspxhome.com/file/2023/1/66321_0s.png)
SpringBoot整合RedisTemplate实现缓存信息监控的步骤
Kotlin协程flowOn与线程切换超详细示例介绍
![](https://img.aspxhome.com/file/2023/0/138000_0s.png)
Spring Boot Security 结合 JWT 实现无状态的分布式API接口
springboot编程式事务TransactionTemplate的使用说明
基于Java实现多线程下载并允许断点续传
![](https://img.aspxhome.com/file/2023/3/101783_0s.png)
SpringMVC使用RESTful接口案例详解
SpringBoot整合Mybatis-plus案例及用法实例
谈谈对Java中的volatile的理解
![](https://img.aspxhome.com/file/2023/3/101953_0s.png)