Я думаю, что вы не можете получить доступ к Запросу через rc.request
, потому что RequestContext#getRequest
защищен, то есть недоступен из FreeMarker / reflection.
Отказ от ответственности: я вообще не эксперт Spring-MVC, поэтому следующий подход может быть совершенно безумным, но он должен работать!
Вы можете выставить необработанный запрос с помощью пользовательских FreeMarkerView
и FreeMarkerViewResolver
, например,
public class CustomFreeMarkerView extends FreeMarkerView {
protected SimpleHash buildTemplateModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) {
SimpleHash fmModel = super.buildTemplateModel(model, request, response);
fmModel.put("RawRequest", request);
return fmModel;
}
}
public class CustomFreeMarkerViewResolver extends AbstractTemplateViewResolver {
public CustomFreeMarkerViewResolver() {
setViewClass(requiredViewClass());
}
@Override
protected Class requiredViewClass() {
return CustomFreeMarkerView.class;
}
}
Затем в вашей конфигурации freemarkerViewResolver
bean-компонента вы можете использовать свой собственный класс преобразователя представления и получить доступ к необработанному запросу в вашем шаблоне через ${RawRequest}
, например,
Scheme: ${RawRequest.scheme}
Server Name: ${RawRequest.serverName}
Этот подход работал для меня с Spring Framework 3.0.5.