gpt4 book ai didi

java - FreeMarker 模板加载器返回 302 Found

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

FreeMarker 返回模板的以下内容:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://someOtherUrl">here</a>.</p>
</body></html>

这根本不可能发生。 FreeMaker 如何获得它?FreeMarker 配置已创建并使用:

    Configuration configuration = new Configuration(Configuration.VERSION_2_3_22);
...
@PostConstruct
void init()
{
configuration.setDefaultEncoding(StandardCharsets.UTF_8.toString());
configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
configuration.setTemplateLoader(new TemplateLoader());
configuration.setLocale(Locale.ENGLISH);
}
...
Template temp = configuration.getTemplate(sourceTemplateUrl);

我可以摆脱这种“聪明”的行为吗?

编辑:

public class TemplateLoader extends URLTemplateLoader
{
private static final String LOCAL_PREFIX = "_" + Locale.ENGLISH;

@Override
protected URL getURL(final String url)
{
try
{
//get rid of "_en" in the url, FreeMarker set it based on Locale
return new URL(url.replace(LOCAL_PREFIX, ""));
}
catch (MalformedURLException e)
{
throw new RuntimeException(e);
}
}
}

最佳答案

该页面不是由 FreeMarker 生成的。 FreeMarker 没有 HTTP 魔法,它只是生成文本。 (当然,如果您让 FreeMarker 从返回此文本的 URL 加载模板,那么它在技术上来自 FreeMarker。)

此外,您的 TemplateLoader 对我来说看起来不起作用,因为您只是从相对路径创建 URL (更新:您正在传递完整的 URL-s ,所以它可以工作,但您也必须处理 HTTP 响应代码)。但无论如何你都不应该在那里进行这样的名称更改。如果您不想进行本地化查找,只需将其关闭即可:

configuration.setLocalizedLookup(false);

或者,如果您需要一些更棘手的东西,请查看configuration.setTemplateLookupStrategy

关于java - FreeMarker 模板加载器返回 302 Found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32585709/

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