Comment lever une exception de retour en JSON au Printemps de Démarrage
J'ai une Demande de mise en correspondance
@RequestMapping("/fetchErrorMessages")
public @ResponseBody int fetchErrorMessages(@RequestParam("startTime") String startTime,@RequestParam("endTime") String endTime) throws Exception
{
if(SanityChecker.checkDateSanity(startTime)&&SanityChecker.checkDateSanity(endTime))
{
return 0;
}
else
{
throw new NotFoundException("Datetime is invalid");
}
}
Si startTime et endTime ne sont pas valides, je veux lancer une erreur 500, mais de retour à l'exception de la chaîne JSON. Cependant, j'obtiens une Page HTML au lieu de dire
Whitelabel Page D'Erreur
Cette application n'a pas explicite pour la cartographie ou de l'erreur, de sorte que vous voyez cela comme une solution de repli.
Wed Dec 20 10:49:37 IST 2017
Il y avait une erreur inattendue (type=Erreur Interne du Serveur, status=500).
Datetime est pas valide
J'ai plutôt voulu revenir 500 avec un JSON
{"error":"Date time format is invalid"}
Comment puis-je aller à ce sujet?
OriginalL'auteur Prateek Narendra | 2017-12-20
Vous devez vous connecter pour publier un commentaire.
Supposons que vous avez une classe d'Exception personnalisée
NotFoundException
et sa mise en oeuvre quelque chose comme ceci:Maintenant, vous voulez lancer une exception de contrôleur. Si vous jeter une exception, alors vous devez l'attraper d'une Erreur standard de la classe de Gestionnaire, disons, par exemple, au printemps, ils fournissent
@ControllerAdvice
annotation à appliquer pour faire une classe Standard Gestionnaire d'Erreur. Lorsqu'il est appliqué à une classe puis ce printemps composant (je veux dire la classe que vous annoté) peut attraper l'exception générée à partir du contrôleur. Mais Nous avons besoin de carte de la classe d'exception avec une bonne méthode. Nous avons donc défini une méthode avec vos exceptionNotFoundException
gestionnaire de quelque chose comme ci-dessous.Vous voulez envoyé http statut d'erreur interne du serveur(500), donc, ici, nous avons utilisé
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
. Depuis que vous avez utilisé Spring-boot, de sorte que vous n'avez pas besoin de faire une chaîne json à l'exception d'une simple annotation@ResponseBody
peut le faire pour vous automatiquement.OriginalL'auteur Ataur Rahman Munna
Créer une exception personnalisée.
Créer une entité de réponse.
Créer un ControllerAdvice avec ExceptionHandler personnalisée d'exception, il va gérer l'exception personnalisée, remplir et renvoyer la réponse personnalisée, comme ci-dessous.
Jeter l'exception personnalisé basé sur votre condition.
Maintenant exécuter et tester votre application. E. G. :
OriginalL'auteur Neeraj Benjwal
vous pouvez créer
NotFoundException
classe avec@ResponseStatus
annotation comme ci-dessous:vous pouvez afficher un message d'erreur à travers le "message" de l'argument de l'exception; en outre, le nom de l'exception elle-même est un message
OriginalL'auteur Hiren
Javax a un nom d'interface comme ExceptionMapper. Veuillez consulter ci-dessous l'extrait de code, Pour chaque RuntimeException dans votre application, il va correspondre à une Réponse Json entité.
}
OriginalL'auteur Mohit Sharma
C'est la façon dont je l'ai fait dans mon application:
Explication:
Vous créez un contrôleur de Conseils, de marquer avec un spécial d'annotation et de définir comme toute autre bean (dans mon cas c'était une java de configuration, mais il n'a pas vraiment d'importance)
Pour chaque Exception que vous souhaitez gérer comme ça - définir un gestionnaire qui va générer une réponse dans un format que vous voulez
Maintenant ce n'est qu'une façon de travailler (de ses plus récentes printemps de démarrage des versions) - mais il en existe d'autres:
Toutes les méthodes que j'en suis conscient (et même plus) sont répertoriés ici.
NotFoundException
ne devrait-elle pas votre@ExceptionHandler
classe@ExceptionHandler(NotFoundException.class)
?Oui, bien sûr, vous avez entièrement raison sur ce point. Je vous ai montré un extrait de code (l'idée) de mon application. Il devrait être une méthode par type d'exception, je crois.
Regarde comme je peux juste envoyer accepter les en-têtes de client et la réponse sera en JSON (grâce à Jackson)
OriginalL'auteur Mark Bramnik