FreeMarker 模板加载器 returns 302 已找到

FreeMarker template loader returns 302 Found

FreeMarker returns模板内容如下:

<!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);

我可以摆脱这种 "smart" 行为吗?

编辑:

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 加载模板,即 returns 这段文本,那么它在技术上来自 FreeMarker。)

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

configuration.setLocalizedLookup(false);

或者,如果您需要更复杂的东西,请查看 configuration.setTemplateLookupStrategy