gpt4 book ai didi

java - 如何在 Freemarker 中自定义/替换异常消息以使它们更有意义?

转载 作者:行者123 更新时间:2023-12-01 09:40:13 26 4
gpt4 key购买 nike

我想“改进”Freemarker 模板消息抛出的一些异常消息,以使异常对用户更有意义。尽管 Freemarker 在有意义的错误消息方面已经变得更好,但仍然存在我想更具体的情况。

示例Freemarker 为这样的模板抛出此异常:

<#if (""?number > 1)>foo</#if>

(只是一个例子......想象空字符串也可以是包含空字符串的变量)

templateException.getMessage() 的值:

 (java.lang.String) Can't convert this string to number: ""
The blamed expression:
==> ""?number [in nameless template at line 1, column 7]

----
FTL stack trace ("~" means nesting-related):
- Failed at: #if (""?number > 1) [in nameless template at line 1, column 1]
----

我想将这个具体案例改写为:

You tried to convert an EMPTY string variable to a number.

我可以尝试我自己的异常处理程序,包含检查,替换消息并重新抛出异常,如下所示:

configuration.setTemplateExceptionHandler(new TemplateExceptionHandler() {
public void handleTemplateException(TemplateException te, Environment env, java.io.Writer out)
throws TemplateException {

String message = te.getMessage();
if(StringUtils.contains(message, "Can't convert this string to number: \"\"")){
message = StringUtils.replace(message, "Can't convert this string to number: \"\"", "You tried to convert an EMPTY string variable to a number. Solution: Try checking if the variable is empty to avoid this error.");
}
throw new TemplateException(message, env);
}
});

但这感觉很hacky。

我的问题:

  1. 有没有办法自定义 Freemarker 抛出的异常消息?我在 TemplateExceptionHandler 中感觉为时已晚,因为消息在 Freemarker 中构建得更早。

  2. 改进/重写来自第 3 方库的异常消息的常见方法有哪些?

最佳答案

版本更新后,搜索和替换可能无法工作,因为消息内容没有向后兼容性 promise 。

如果您想要的更改通常有用(不仅对您的项目有用),那么您可以通过向 FreeMarker 做出贡献(签署 Apache CLA、在 GitHub 上 fork 、发出拉取请求)来改进现有错误消息。

我看到的唯一真正正确和灵活的方法是向错误消息机制添加 l10n 支持,其中消息字符串没有硬连接到代码中(默认值除外),而是根据来自的消息键检索外部源。当然,这可能是一项艰巨的工作,特别是当 FreeMarker 消息是由许多较小的部分组装而成时。

关于java - 如何在 Freemarker 中自定义/替换异常消息以使它们更有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38515314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com