Printemps de démarrage d'erreur 404 personnalisée de réponse en cas d'erreur Reste
Je suis en utilisant le Printemps de démarrage pour l'hébergement d'une API REST. Au lieu d'avoir l'erreur standard de la réponse que je voudrais toujours envoyer une réponse JSON même si un navigateur pour accéder à l'URL et ainsi une structure de donnée spécifique.
Je peux le faire avec @ControllerAdvice et @ExceptionHandler personnalisée d'exception. Mais je ne peux pas trouver une bonne manière de le faire pour le standard et gérées les erreurs comme le 404 et 401.
Y a de bons motifs de comment faire cela?
Markus, ma réponse à résoudre le problème? Si oui, veuillez l'accepter.
OriginalL'auteur Markus | 2015-06-18
Vous devez vous connecter pour publier un commentaire.
Erreur 404 est gérée par DispatcherServlet. il y a une propriété throwExceptionIfNoHandlerFound, que vous pouvez remplacer.
Dans la classe d'Application vous pouvez créer un nouveau bean:
...et puis prendre le NoHandlerFoundException exception dans
Est-il possible de le faire sans l'aide de l'annotation
@EnableWebMvc
je ne veux pas activer Web MVCOriginalL'auteur maxie
J'ai fourni la solution de l'échantillon sur la façon de passer outre la réponse de 404 cas. La solution est très simple et je vous poste le code de l'échantillon, mais vous pouvez trouver plus de détails sur le thread d'origine: Printemps de Démarrage Reste - Comment configurer 404 - ressource introuvable
Première: définir le Contrôleur qui va traiter les cas d'erreur et les remplacer réponse:
Deuxième: vous devez indiquer le Printemps de jeter l'exception en cas d'erreur 404 (impossible de résoudre le gestionnaire):
@EnableWebMvc
je ne veux pas activer Web MVCSalut @Reema! Avez-vous été en mesure de le faire sans
@EnableWebMvc
? Je voudrais le faire sans elle.Non, je n'ai pas de solution pour cela pas encore!
OriginalL'auteur Ilya Ovesnov
Vous pouvez ajouter des ErrorPage objets qui sont en corrélation de l'erreur de définition de page dans web.xml. Printemps de Démarrage fournit un exemple...
EDIT: Alors que je pense que la méthode ci-dessus ne fonctionnera que si vous faites des pages d'erreur reste contrôleurs, d'une manière encore plus facile serait d'inclure une coutume ErrorController comme celle ci-dessous...
OriginalL'auteur hyness
Résumant toutes les réponses et commentaires, je pense que la meilleure façon de le faire est-
D'abord, dites-le printemps de démarrage à jeter l'exception en cas de non gestionnaire trouvé dans
application.properties
Puis de gérer la
NoHandlerFoundException
dans votre application. - Je les traiter par la suite de façonOriginalL'auteur Emdadul Sawon
Il semble que vous avez besoin d'introduire une bonne méthode annotée, par exemple pour unsupported media type (415), ce sera:
Cependant, il peut ne pas être possible depuis 401 et 404 peut être levée avant qu'ils n'atteignent
DispatcherServlet
- dans ce casControllerAdvice
ne fonctionnera pas.La structure que j'ai présenté est la valeur par défaut JSON erreur de réponse de la structure. Si vous avez besoin seulement de 401 ou 404 juste ajouter des exceptions au lieu de
MethodArgumentNotValidException
et de modifier le corps de la méthode.OriginalL'auteur Opal
Veuillez voir Printemps de Démarrage RESTE du service de la gestion des exceptions. Il montre comment le dire à la dispatcherservlet à émettre des exceptions pour les "no route found" et puis comment attraper ces exceptions. Nous (mon lieu de travail) sont à l'aide de ce dans la production de nos services RESTE maintenant.
OriginalL'auteur ogradyjd