2017-09-04 1 views
0

J'écris un microservice dans Play. J'aimerais que mon contrôleur puisse générer des erreurs client (4xx) avec un corps de réponse JSON particulier. Cependant, la valeur par défaut HttpErrorHandler de Play est ajoutée et remplace mon corps de réponse par un document HTML.Contourner HttpErrorHandler de Play pour les erreurs 4xx

Comment puis-je avoir la réponse retournée au client intacte?

J'ai cherché à fournir un HttpErrorHandler personnalisé, mais cela ne donne pas accès à la réponse que mon contrôleur avait générée; la signature est:

def onClientError(request: RequestHeader, statusCode: Int, message: String): Future[Result] 

Edit: Je ne peux plus reproduire ce problème. Maintenant, le gestionnaire d'erreur ne démarre pas - quel est le comportement que je m'attendrais. Très probablement une forme de confusion ou d'erreur de l'utilisateur.

Répondre

1

Une erreur client est une condition provoquée par le client et Play ne sait pas comment gérer. Cela inclut les en-têtes mal formés, les ressources inexistantes (lisez: Aucune route disponible pour ce chemin).

Dans tous les cas, cela ne touchera pas un contrôleur: il est géré avant d'être routé. Cela signifie également qu'il n'y a pas de corps qui puisse être transmis.

Si cela arrive sur un contrôleur, vous êtes libre de retourner un résultat avec le code de réponse et le corps appropriés. S'il ne frappe pas un contrôleur et que le gestionnaire d'erreurs est appelé, vous devez renvoyer une réponse basée sur la requête elle-même. Un exemple de ce que vous essayez d'obtenir serait pratique, car c'est un peu flou pour moi.

+0

Salut @Igmar, embarrassant, je ne vois plus le comportement que je pensais avoir vu hier, et il se comporte comme vous le décrivez (ce que je veux). Doit avoir été la confusion de l'utilisateur - des excuses! –