如何在Mustache Java中全局禁用转义功能?
全局禁用Mustache Java的所有转义操作
要全局禁用Mustache Java对插值内容的转义,核心是替换默认的HTML转义编码器,改用一个不执行任何转义逻辑的自定义编码器。
实现步骤
- 创建
DefaultMustacheFactory实例时,通过setEncoder()方法设置自定义编码器,该编码器直接返回原始值,不做任何转义处理 - 后续编译模板、执行渲染的逻辑保持不变
修改后的完整代码
var mustacheFactory = new DefaultMustacheFactory(); // 设置全局无转义编码器:直接返回原始值,空值转为空字符串 mustacheFactory.setEncoder(obj -> obj != null ? obj.toString() : ""); var mustache = mustacheFactory.compile("templates/test.mustache"); var writer = new StringWriter(); mustache.execute(writer, Map.of("value", "=")).flush(); var content = writer.toString(); System.out.println(content);
验证效果
运行上述代码后,输出结果将变为:
Interpolated data is escaped: =
所有插值内容会直接输出原始值,无需再使用{{{}}}分隔符。
原理说明
Mustache Java默认使用HtmlEscaper作为编码器,会对HTML特殊字符进行转义。通过替换为自定义的无操作编码器,我们覆盖了全局的转义行为,让所有插值都以原始形式渲染。
内容的提问来源于stack exchange,提问作者Itzhak Eretz Kdosha
相关产品推荐
相关产品推荐

