Как вы описали в разделе комментариев, вам нужно получить токен из параметра запроса и добавить в него заголовок ответа. Давайте предположим, что этот токен является необязательным, следовательно, может отсутствовать, поэтому это может быть достигнуто примерно так:
implicit request => myService.getAll(meta).map { result =>
// Fetch optional token as query parameter. `token_parameter` - parameter key
val requestToken = request.queryString.get("token_parameter").flatMap(_.headOption)
val results: Seq[Resp] = result._2.map(res => Mapper(res))
val body = Json.toJson(MyListResponse.apply(meta, result._1, results))
// Add token to header if it is present
requestToken.fold(Ok(body))(token => Ok(body).withHeaders("token_header" -> token))
}
Обновление
Для применения этой логики c для ВСЕХ маршрутов, вы можете использовать функцию Play Filters. Пожалуйста, смотрите do c для более подробной информации: https://www.playframework.com/documentation/latest/ScalaHttpFilters
Что вам нужно сделать:
1) Реализуйте свою собственную игру Filter
. Это будет выглядеть примерно так:
import javax.inject.Inject
import akka.stream.Materializer
import play.api.mvc._
import scala.concurrent.ExecutionContext
import scala.concurrent.Future
class TokenFilter @Inject() (implicit val mat: Materializer, ec: ExecutionContext) extends Filter {
def apply(nextFilter: RequestHeader => Future[Result])
(requestHeader: RequestHeader): Future[Result] = {
nextFilter(requestHeader).map { result =>
val requestToken = requestHeader.queryString.get("token_parameter").flatMap(_.headOption)
requestToken.fold(result )(token => result.withHeaders("token_header" -> token))
}
}
}
2) Подключите фильтр к остальной части приложения. Например, добавив следующую конфигурацию в application.conf
play.http.filters += com.yourcomany.TokenFilter
Надеюсь, это поможет!