2012-07-20 5 views
6

Sto convertendo parte del mio codice java in scala e vorrei poter ottenere un'intestazione specifica e restituirla come stringa.scala play 2.0 get request header

in Java che ho:

return request().getHeader("myHeader") 

Sono stato in grado di raggiungere la stessa cosa in scala. Qualsiasi aiuto sarebbe molto apprezzato! Grazie!

+0

http://stackoverflow.com/questions/11198998/scala-play-2-passing-request-to-method vedere anche commenti qui sotto la risposta di Travis Brown. – user1253952

risposta

7

si potrebbe scrivere:

request.get("myHeader").orNull 

Se si voleva qualcosa di essenzialmente lo stesso del vostro linea di Java. Ma tu no!

request.get("myHeader") restituisce un Option[String], che è il modo di Scala di incoraggiarvi a scrivere codice che non genererà eccezioni di puntatore nullo.

È possibile elaborare Option in vari modi. Ad esempio, se si vuole fornire un valore di default:

val h: String = request.get("myHeader").getOrElse("") 

Oppure, se si vuole fare qualcosa con l'intestazione se esiste:

request.foreach { h: String => doSomething(h) } 

O semplicemente:

request foreach doSomething 

Vedi this cheat sheet per maggiori possibilità.

+0

Grazie mille! ho notato che dovrei gestire anche il caso null/Option. Forse sto avendo un problema più basilare. Ricevo l'errore "non trovato: richiesta valore". – user1253952

+0

Dove stai cercando di usarlo? –

+0

In uno dei miei file di controller, in un metodo molto semplice: def getName = request.get ("myHeader") – user1253952

4

Quando ho provato in precedenza risposta per Scala con play framework 2.2:

request.get("myHeader").getOrElse("") 

Mi dà il seguente errore:

value get is not a member of play.api.mvc.Request[play.api.mvc.AnyContent]

Quando uso:

request.headers.get("myHeader").getOrElse("") 

questo funziona ora . Suggerisco di usare questo.