2015-09-14 6 views
4

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

И все работают должным образом.

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

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

+0

Привет, Тем не менее я не мог найти способ, чтобы напечатать все заголовки HTTP. В java мы можем получить его как коллекцию и прокрутить ее и распечатать все. 'Мне просто интересно, почему это так сложно с распылителем и scala ???' –

ответ

6

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

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

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

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

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

logHeaders() { 
    complete("hello") 
} 
+0

Спасибо за быстрый ответ. Для меня работает первый способ. Но я бы предпочел альтернативный путь, и он дает синтаксическую ошибку с вызовом «foreach» ------- Ошибка: (37, 61) Значение foreach не является членом spray.routing. Директива1 [Список [спрей. http.HttpHeader]] def logHeaders(): Directive0 = extract (_. request.headers) .foreach (println) --------- –

+0

woops, попробуйте 'map' вместо' foreach' –

+0

карта делает Не помогайте. Я получаю ошибку компиляции как ------- Ошибка: (42, 51) значение foreach не является членом spray.routing.Directive1 [List [spray.http.HttpHeader]] def logHeaders1() = extract (_ .reachest.headers) .foreach (println) ----- Выше была ошибка, которую я получил, к сожалению, я не смог получить список из spray.routing.Directive1 –

2

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

Директива:

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

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

logHeaders() { 
    complete("hello") 
}