2017-09-26 5 views
0

Pour la pièce de code suivante donnée dans la documentation Play (https://www.playframework.com/documentation/2.6.x/ScalaLogging)Jouer 2.6.x Scala Comment spécifier un organisme TolerantText Parser pour une action

class AccessLoggingAction @Inject() (parser: BodyParsers.Default)(implicit ec: ExecutionContext) extends ActionBuilderImpl(parser) { 
    val accessLogger = Logger("access") 
    override def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = { 
    accessLogger.info(s"method=${request.method} uri=${request.uri} remote-address=${request.remoteAddress}") 
    block(request) 
    } 
} 

Le code ci-dessus utilise BodyParsers.Default, comment pourrais-je utiliser un TolerantText BodyParser à la place? Il ne semble pas que BodyParsers.TolerantText existe? Je voudrais utiliser un TolerantText BodyParser afin que je puisse enregistrer une erreur dans le cas où une requête POST est soumise de sorte que la demande spécifie un type de contenu JSON et envoie un corps JSON invalide tel que {"- - "} (Le BodyParser par défaut renvoie une erreur immédiatement lorsqu'un JSON invalide est donné ce qui ne me donne pas l'opportunité de consigner cette erreur. J'ai lu qu'un TolerantText BodyParser dans Play ne jette pas l'erreur immédiatement parce que il ignore l'en-tête du contenu et n'essaie pas d'analyser le corps en fonction de l'en-tête du contenu.)

J'aimerais pouvoir utiliser un analyseur de corps TolerantText ou tout ce qui ne génère pas immédiatement une erreur. peut se connecter lorsque cela se produit dans cette action particulière.

+0

Injecter la 'PlayBodyParsers' place – rethab

+0

J'ai essayé avec l'injection _PlayBodyParsers_ avec le suivant' '' classe AccessLoggingAction @Inject () (parser: PlayBodyParsers.tolerantText) (implicite ec: ExecutionContext) extends ActionBuilderImpl (parser) {... '' ' Ce qui précède ne semble pas fonctionner et avec ce qui précède, j'obtiens l'erreur suivante: (_Cannot résolution symbole tolerantText_) Toutes les idées sur la façon de résoudre ce problème? Merci pour votre temps. – user8679288

Répondre

1

Pour injecter PlayBodyParsers comme @rethab suggéré, définir votre classe comme suit:

class AccessLoggingAction @Inject() (parser: PlayBodyParsers)(implicit ec: ExecutionContext) 
    extends ActionBuilderImpl(parser.tolerantText) { 
    ... 
} 
+0

Merci, ça marche! – user8679288