2016-02-23 6 views
0

В нашем (Java) приложении Play у нас есть асинхронное задание, которое отправляет электронные письма пользователям при передаче различных крайних сроков. Предполагается, что электронные письма содержат ссылки на соответствующие страницы нашего сайта. Однако в таком асинхронном задании невозможно создать абсолютные URL-адреса, используя routes.MyPage.myTemplate().absoluteURL(), поскольку нет контекста HTTP.Абсолютные URL-адреса в Play Framework (Java) без контекста HTTP

Каков рекомендуемый шаблон для получения абсолютных URL-адресов вне контекста HTTP? Для тестов было бы create a "fake" HTTP context, но я не считаю, что это правильный путь к вещам в производстве?

ответ

1

play.mvc.Call имеет более одной версии absoluteUrl. Существует версия, подобная следующей:

/** 
* Transform this call to an absolute URL. 
* 
* @param secure true if the absolute URL should use HTTPS protocol instead of HTTP 
* @param host the absolute URL's domain 
* @return the absolute URL string 
*/ 
public String absoluteURL(boolean secure, String host) 

Вы можете использовать ее для генерации абсолютных URL-адресов без запроса.

+0

И как мне получить «хозяин»? – plade

+0

Я решил это, установив хост в файл конфигурации. Вы можете получить имя хоста компьютера, но я бы пошел, установив его в 'application.conf' – adis

+0

OK; это было единственное решение, которое я мог бы придумать. Я думал, что может быть какой-то причудливый способ получить имя хоста, но я думаю, что сервер не может знать свой собственный адрес, если нет HTTP-контекста. – plade