J'essaie de supprimer la page d'erreur en marque blanche, donc j'ai créé un mappage de contrôleur pour "/ error",
@RestController
public class IndexController {
@RequestMapping(value = "/error")
public String error() {
return "Error handling";
}
}
Mais maintenant, j'obtiens cette erreur.
Exception in thread "AWT-EventQueue-0" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'basicErrorController' bean method
public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletR equest)
to {[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already 'indexController' bean method
Je ne sais pas si je fais quelque chose de mal. S'il vous plaît des conseils.
ÉDITER:
Déjà ajouté
error.whitelabel.enabled=false
au fichier application.properties, toujours la même erreur
spring
spring-boot
Yasitha Waduge
la source
la source
spring.resources.add-mappings=false
?/error
chemin est appelé?Réponses:
Vous devez modifier votre code comme suit:
Votre code n'a pas fonctionné, car Spring Boot enregistre automatiquement le en
BasicErrorController
tant que Spring Bean lorsque vous n'avez pas spécifié d'implémentation deErrorController
.Pour voir ce fait, accédez simplement à
ErrorMvcAutoConfiguration.basicErrorController
ici .la source
BasicErrorController
(voir github.com/spring-projects/spring-boot/blob/… ) pour accomplir ce que vous voulezErrorAttributes
objet (contenant les détails de l'erreur), mais j'ai ensuite essayé simplement @Autowiring, et cela fonctionne. Ce que je suis allé avec pour l'instant: gist.github.com/jonikarppinen/662c38fb57a23de61c8bSi vous voulez une page de réponse plus "JSONish", vous pouvez essayer quelque chose comme ça:
la source
Le document de démarrage de printemps `` était '' faux (ils l'ont depuis corrigé):
devrait être
la source
/error
quand même le point final . Pour libérer l'/error
ensemble de points de terminaisonserver.error.path=/error-spring
ou un chemin alternatif.Vous pouvez le supprimer complètement en spécifiant:
Cependant, notez que cela entraînera probablement l'affichage des pages de marque blanche du conteneur de servlet à la place :)
EDIT: Une autre façon de faire est via application.yaml. Mettez simplement la valeur:
Documentation
Pour Spring Boot <2.0, la classe se trouve dans package
org.springframework.boot.autoconfigure.web
.la source
Le manuel indique ici que vous devez définir
server.error.whitelabel.enabled
surfalse
pour désactiver la page d'erreur standard. C'est peut-être ce que tu veux?Au fait, je rencontre la même erreur après l'ajout / le mappage d'erreur.
la source
/error
quand même le point final . Pour libérer l'/error
ensemble de points de terminaisonserver.error.path=/error-spring
ou un chemin alternatif.Avec Spring Boot> 1.4.x, vous pouvez faire ceci:
mais en cas d'exception, le conteneur de servlet affichera sa propre page d'erreur.
la source
Cela dépend de votre version de démarrage de printemps:
Lorsque SpringBootVersion <=
1.2
alors utilisezerror.whitelabel.enabled = false
Lorsque SpringBootVersion > =
1.3
alors utilisezserver.error.whitelabel.enabled = false
la source
Dans Spring Boot 1.4.1 en utilisant les modèles Moustache, placer error.html dans le dossier des modèles suffira:
Des variables supplémentaires peuvent être transmises en créant un intercepteur pour
/error
la source
Voici une méthode alternative qui est très similaire à la "vieille méthode" de spécification des mappages d'erreurs dans
web.xml
.Ajoutez simplement ceci à votre configuration Spring Boot:
Ensuite, vous pouvez définir normalement les pages d'erreur dans le contenu statique.
Le personnalisateur peut également être un élément distinct
@Component
, si vous le souhaitez.la source
J'utilise Spring Boot version 2.1.2 et la
errorAttributes.getErrorAttributes()
signature n'a pas fonctionné pour moi (en réponse à une réponse de Cohen). Je voulais une réponse de type JSON alors j'ai creusé un peu et j'ai trouvé que cette méthode faisait exactement ce dont j'avais besoin.J'ai obtenu la plupart de mes informations de ce fil ainsi que de ce billet de blog .
Tout d'abord, j'ai créé un
CustomErrorController
que Spring recherchera pour mapper les erreurs.Deuxièmement, j'ai créé une
CustomHttpErrorResponse
classe pour renvoyer l'erreur au format JSON.Enfin, j'ai dû désactiver l'étiquette blanche dans le
application.properties
fichier.Cela devrait même fonctionner pour les
xml
demandes / réponses. Mais je n'ai pas testé cela. Il a fait exactement ce que je recherchais depuis que je créais une API RESTful et que je voulais uniquement renvoyer JSON.la source
server.error.whitelabel.enabled = false
Incluez la ligne ci-dessus dans les dossiers de ressources application.properties
Plus de résolution des problèmes d'erreur, veuillez vous référer à http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whitelabel-error-page
la source
J'essayais d'appeler un point de terminaison REST à partir d'un microservice et j'utilisais la méthode put du resttemplate .
Dans ma conception si une erreur a été commise dans le REST point final , il doit renvoyer une réponse d'erreur JSON, il travaillait pour certains appels mais pas pour ce mettre un, il est retourné à la page d'erreur de marque blanche à la place.
J'ai donc fait une enquête et j'ai découvert cela;
Spring essaie de comprendre l'appelant s'il s'agit d'une machine, puis il renvoie une réponse JSON ou s'il s'agit d'un navigateur, il renvoie la page d'erreur en marque blanche HTML.
En conséquence: mon application client devait dire au point de terminaison REST que l'appelant est une machine, pas un navigateur, donc pour cela, l'application client doit ajouter ' application / json explicitement '' dans l'en-tête ACCEPT pour la méthode `` put '' du resttemplate. J'ai ajouté ceci à l'en-tête et résolu le problème.
mon appel au point final:
pour l'appel ci-dessus, j'ai dû ajouter le paramètre d'en-tête ci-dessous.
ou j'ai essayé de changer de mise en échange également, dans ce cas, l'appel d'échange a ajouté le même en-tête pour moi et a résolu le problème aussi mais je ne sais pas pourquoi :)
la source
Spring Boot a par défaut une page d'erreur « whitelabel » que vous pouvez voir dans un navigateur si vous rencontrez une erreur de serveur. La page d'erreur Whitelabel est une page d'erreur Spring Boot générique qui s'affiche lorsqu'aucune page d'erreur personnalisée n'est trouvée.
Définissez "server.error.whitelabel.enabled = false" pour basculer vers la page d'erreur par défaut
la source
J'ai eu un message d'erreur WhiteLabel similaire sur mon SPA angulaire chaque fois que je faisais une actualisation.
Le correctif consistait à créer un contrôleur qui implémente ErrorController, mais au lieu de renvoyer une chaîne, je devais renvoyer un objet ModelAndView qui transfère vers /
la source