前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot中Freemarker异常处理

Spring Boot中Freemarker异常处理

作者头像
只喝牛奶的杀手
发布2019-08-26 17:53:25
1.5K0
发布2019-08-26 17:53:25
举报

在Freemarker页面中如果使用${userName},并且userName为空,那么Freemarker页面就会崩掉 需要设置默认值${userName!}来避免对象为空的错误。

同理 ${user.userName}也应该写成这样${(user.userName)!""}现在有一个需求,就是万一我用了${userName},但是我又不想页面崩掉,怎么办呢?

我们先来看一下一个程序启动,到一个请求过来的过程:

  1. 初始化服务端ServerSocket
  2. 初始化TreadPool
  3. while(true)等待客户端连接(多路复用Reactor)
  4. <<服务器启动完成>>
  5. 客户端请求
  6. clientHandler处理客户端的请求
  7. 线程池的线程处理handler
  8. 根据输入流解析请求(解析请求行,解析消息头,解析消息正文)
  9. 根据输出流创建响应对象(发送状态行信息,发送响应头信息,发送响应正文信息)
  10. <<静态html处理结束>>
  11. 寻找servlet 根据请求路径找到需要哪个servlet处理(选择handler)
  12. 通过反射机制加载这个类
  13. 实例化servlet
  14. servlet处理请求(执行handler结束)
  15. <<跳转html处理结束>>
  16. 返回模板
  17. 解析视图
  18. 渲染视图

Freemarker与Web容器无关,web项目中的异常处理(@ControllerAdvice)只处理web请求,经由controller引发的异常,无法处理freemarker的异常,为了不让ftl页面再出现“乱码”错误,即使出现freemarker语法或者判断错误,还可以继续解析下面的内容。

FreemarkerConfiguration添加:

   @PostConstruct
    public void setSharedVariable() {
        freemarkerTemplateConfiguration.setTemplateExceptionHandler(new MyTemplateExceptionHandler());
    }

MyTemplateExceptionHandler定义:

@Component
public class MyTemplateExceptionHandler implements TemplateExceptionHandler {

    private static Logger logger = LoggerFactory.getLogger(MyTemplateExceptionHandler.class);

    @Override
    public void handleTemplateException(TemplateException templateException, Environment environment, Writer out) {
        logger.error(templateException.getMessage());
    }
}

这样即使ftl解析错误,比如某个变量没有定义,可以忽略,只是后台抛异常,然后整个页面还是会渲染出来还会继续解析页面,提高项目处理异常的健壮性。


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 只喝牛奶的杀手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档