Как получить информацию заголовка HTTP-запроса со стороны сервера с помощью спрея RestAPI

Я новичок в Scala и Spray. Я написал простой REST API в соответствии с инструкциями, приведенными в этом блоге. http://www.smartjava.org/content/first-steps-rest-spray-and-scala

И все работают как положено.

Теперь я хочу изменить программу для печати заголовков HTTP, таких как Encoding, Language, remote-address и т. Д. Я хотел бы напечатать всю информацию заголовка (цель состоит в том, чтобы зарегистрировать эту информацию)

Но я не мог найти надлежащую документацию или примеры. Может ли кто-нибудь, пожалуйста, помогите мне сделать это.

2 ответа

Решение

Если вам нужно извлечь конкретный заголовок:

optionalHeaderValueByName("Encoding") { encodingHeader =>
  println(encodingHeader)
  complete("hello")
}

в качестве альтернативы вы можете получить доступ к необработанному объекту запроса и непосредственно извлечь заголовки. Вот пользовательская директива, которая регистрирует все заголовки:

def logHeaders(): Directive0 = extract(_.request.headers).map(println)

использование

logHeaders() {
  complete("hello")
}

Вот как я получил это работает.

Директива:

def logHeaders(innerRoute: Route): (RequestContext => Unit) = extract(_.request.headers) { headers =>
  headers.foreach(h => logger.info("header: {} = {}", h.name, h.value))
  innerRoute
}

Использование:

logHeaders() {
  complete("hello")
}
Другие вопросы по тегам