• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SpringBoot集成Beetl后统一处理页面异常的方法

springboot 搞代码 4年前 (2022-01-09) 56次浏览 已收录 0个评论

背景

SpringBoot集成Beetl后如果页面出现异常会将出现异常之前的页面输出到客户端,但是由于页面不完整会导致用户看到的页面错乱或者空白,如下

<!DOCTYPE html>
<html lang="en">
<he<div>本文来源gaodai.ma#com搞##代!^码@网3</div>ad>
  <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去判断当前环境;也可以抛出异常到全局异常统一处理。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:SpringBoot集成Beetl后统一处理页面异常的方法
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址