2 Star 5 Fork 2

chentao106 / 简易自定义表达式模板解析器

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

#简易自定义表达式模板解析器

为什么要造一个新轮子

  • 在做企业IT项目时,经常会有用户提出动态生成邮件、PDF文件的需求。
  • FreeMarker、Velocity虽然强大,但是面对的是专业人员,语法复杂灵活,并不适合开放给最终用户。
  • 其它一些字符串模板引擎,又过于简单,难于按需、高效地与自己的代码逻辑集成。

模板解析器应用场景

用户需求

亲爱的XXX先生/女士
  你好!欢迎加入XXX公司,你的部门是XXX,岗位职级XXX

  人事部 HR XXX先生/女士

其中XXX部分,都是需要根据参数,或者后台数据自动替换的内容

模板设计

亲爱的${uid|userInfo|prop:name}${uid|userInfo|prop:gender|genderName}
  你好!欢迎加入不存在公司,你的部门是${uid|department|prop:name},岗位职级${uid|position|prop:name}

  人事部 HR ${my|prop:name}${my|prop:gender|genderName}

语法

  • "${}":需要值替换的表达式,包含在"${"与"}"之间;
  • "|": 顺序串联单个表达式的多个函数调用,前一调用的值会作为后一调用的第一参数;
  • ":": 若调用有额外参数,则追加在":"之后;
  • ",": 若额外参数不止一个,参以","分隔。

函数说明

  • uid: 获取当前调用的目标用户id
  • userInfo: 根据用户id获取用户信息
  • prop:name: 获取对象的"name"属性
  • prop:gender: 获取对象的"gender"属性
  • genderName: 获取性别的中文名
  • department: 根据用户id获取所在部门信息
  • position: 根据用户id获取其岗位信息
  • my: 获取session中当前登录的用户信息

实现过程

本项目的git提交记录完整展示了实现过程:

  1. 创建代码框架及测试用例;
  2. 提取字符器模板中的表达式;
  3. 解析表达式调用链;
  4. 实现表达式求值;
  5. 组装代码实现模板求值。

效果

  • 参考单元测试,即可实现自己的函数;
  • 本工程已经具备打包为jar包使用的条件,通过创建SimpleExpressionInterpreter的实例,并注入自己的FunctionProvider来使用。

后续工作

  1. 模板求值采用replace会涉及内存分配,可以在解析表达式的同时,把模板片段也解析出来,在求值后整体进行一次拼字符串操作;
  2. 解析器的创建可以引入Builder生成器,从而语法关键字可以实现运行时的动态指定。

空文件

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/chentao106/SimpleExpressionInterpreter.git
git@gitee.com:chentao106/SimpleExpressionInterpreter.git
chentao106
SimpleExpressionInterpreter
简易自定义表达式模板解析器
master

搜索帮助