10
votes

Obtenir le corps de la réponse à partir de play.api.mvc.action [Anycontent] dans le cadre de jeu (Scala)

J'ai le code de lecture suivant (SCALA):

 scala> val action = simple
 action: play.api.mvc.Action[play.api.mvc.AnyContent] = Action(parser=BodyParser(anyContent))    


1 commentaires

Je suis désolé mais la question n'est pas claire pour moi. Vous souhaitez imprimer la réponse HTML finale sur RÉPL?


3 Réponses :


2
votes

action code> n'a pas de contenu car c'est un objet que vous pouvez utiliser pour appliquer une demande code> et obtenir un résultat.

val request: Request[A] = ... // create a request instance
val resultFuture: Future[SimpleResult] = simple(request)

val bodyAsBytes: Array[Byte] = Await.result(Await.result(resultFuture, timeout.duration).body |>>> Iteratee.consume[Array[Byte]](), timeout.duration)


4 commentaires

Merci, comment puis-je instancier une nouvelle demande [a] objet, et quel est le [A]? Je pense que c'est une contrainte de type de type, mais je ne reçois pas le 'a'. Beaucoup de mon incardition avec Scala ne connaît pas lorsque nous sommes en mode OO ou en mode FP!


Le A est ce que vous voulez, c'est un paramètre de type à fournir au constructeur de type pour créer un type de béton. Pour vous, vous pouvez regarder play.api.test.fakerequest , il est fourni par la lecture! effectuer des tests d'unité plus faciles.


Merci, j'ai remarqué qu'il y avait une pièce de théâtre.api.test.fakerequest dans les documents de l'API, mais je ne peux pas l'importer sur la replique ou dans mon code que je suppose que cela signifie qu'il n'est pas expédié avec le jeu standard.


@ user3231690 Vous devez inclure la bibliothèque Play-Test_2.xx.jar (où XX est votre version de lecture).



6
votes

Plutôt que l'extraction de résultats manuels VPTHERON décrit, vous pouvez utiliser play.api.test.helpers : xxx

Il y a aussi contentoSring etc.


0 commentaires

6
votes

bâtiment sur le Réponse de HUW , voici le code de travail complet:

import play.api.test._  
def getStringFromAction(action:Action[AnyContent]):String = {
  val request = new FakeRequest("fakeMethod", "fakeUrl", new FakeHeaders, "fakeBody")
  val result = action.apply(request).run
  import scala.concurrent.duration._
  Helpers.contentAsString(result)(1000 millis)
}


1 commentaires

@ JUS12 Savez-vous comment faire fonctionner votre réponse avec la lecture 2.5? Fakerequest est parti, remplacé par RequestBuilder et le code ci-dessus veut également un matérialisateur AKKA. Depuis la mise à niveau vers 2,5, le code ci-dessus ne compile plus.