如何在 Freemarker 中获取请求对象

How to get a request object in Freemarker

在 Velocity 模板引擎中,我可以只使用模型变量

$request

这是 HttpServletRequest 的一个实例。如何在 Freemarker 模板引擎中获取 http 请求对象?根据 freemarker 文档,

http://freemarker.org/docs/api/freemarker/ext/servlet/HttpRequestHashModel.html#getRequest--

有一个 class HttpRequestHashModel 及其方法 returns HttpServletRequest 的一个实例。

那么问题来了,如何在spring开机时访问这个对象?我找到了一些关于使用

的信息
${Request}

变量,但我得到一个错误,它 returns 一个 null/missing 对象。

据我所知,Spring 不会直接向模板公开请求,但默认情况下它会公开模型属性 springMacroRequestContext,其中包含一个关于请求的很多信息。

springMacroRequestContext 变量允许您获取有关请求的信息。

例如:

<html lang="${springMacroRequestContext.locale.language}" class="no-js">

${springMacroRequestContext.contextPath}

根据您获取路径的要求:

${springMacroRequestContext.requestUri} 

应该足够了。

有关所有可用方法,请参阅 org.springframework.web.servlet.support.RequestContext

您可以通过在 application.properties 中设置以下 属性 来更改此属性的名称:

spring.freemarker.request-context-attribute=rc

这允许您缩短模板中的语法:

${rc.locale}