Spring Boot Supprimer Whitelabel Error Page

J’essaie de supprimer la page d’erreur de marque blanche, donc j’ai créé un mappage de contrôleur pour “/ erreur”,

@RestController public class IndexController { @RequestMapping(value = "/error") public Ssortingng error() { return "Error handling"; } } 

Mais maintenant je reçois 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> 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 conseil.

MODIFIER:

Déjà ajouté error.whitelabel.enabled=false au fichier application.properties, toujours en erreur

    Vous devez changer votre code pour ce qui suit:

     @RestController public class IndexController implements ErrorController{ private static final Ssortingng PATH = "/error"; @RequestMapping(value = PATH) public Ssortingng error() { return "Error handling"; } @Override public Ssortingng getErrorPath() { return PATH; } } 

    Votre code n’a pas fonctionné car Spring Boot enregistre automatiquement BasicErrorController tant que Bean Spring lorsque vous n’avez pas spécifié d’implémentation de ErrorController .

    Pour voir ce fait, accédez simplement à ErrorMvcAutoConfiguration.basicErrorController ici .

    Si vous voulez une page de réponse plus “JSONish”, vous pouvez essayer quelque chose comme ça:

     import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.web.ErrorAtsortingbutes; import org.springframework.boot.autoconfigure.web.ErrorController; import org.springframework.util.Assert; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.context.request.RequestAtsortingbutes; import org.springframework.web.context.request.ServletRequestAtsortingbutes; import javax.servlet.http.HttpServletRequest; import java.util.Map; @RestController @RequestMapping("/error") public class SimpleErrorController implements ErrorController { private final ErrorAtsortingbutes errorAtsortingbutes; @Autowired public SimpleErrorController(ErrorAtsortingbutes errorAtsortingbutes) { Assert.notNull(errorAtsortingbutes, "ErrorAtsortingbutes must not be null"); this.errorAtsortingbutes = errorAtsortingbutes; } @Override public Ssortingng getErrorPath() { return "/error"; } @RequestMapping public Map error(HttpServletRequest aRequest){ Map body = getErrorAtsortingbutes(aRequest,getTraceParameter(aRequest)); Ssortingng trace = (Ssortingng) body.get("trace"); if(trace != null){ Ssortingng[] lines = trace.split("\n\t"); body.put("trace", lines); } return body; } private boolean getTraceParameter(HttpServletRequest request) { Ssortingng parameter = request.getParameter("trace"); if (parameter == null) { return false; } return !"false".equals(parameter.toLowerCase()); } private Map getErrorAtsortingbutes(HttpServletRequest aRequest, boolean includeStackTrace) { RequestAtsortingbutes requestAtsortingbutes = new ServletRequestAtsortingbutes(aRequest); return errorAtsortingbutes.getErrorAtsortingbutes(requestAtsortingbutes, includeStackTrace); } } 

    Vous pouvez le supprimer complètement en spécifiant:

     import org.springframework.context.annotation.Configuration; import org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration; ... @Configuration @EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class}) public static MainApp { ... } 

    Cependant, notez que cela entraînera probablement l’affichage des pages de liste blanche du conteneur de servlets 🙂


    EDIT: Une autre façon de faire est via application.yaml. Il suffit de mettre la valeur:

     spring: autoconfigure: exclude: org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration 

    Documentation

    Pour Spring Boot <2.0, la classe se trouve dans le package org.springframework.boot.autoconfigure.web .

    Spring boot doc ‘était’ faux (ils ont depuis corrigé cela):

    Pour le désactiver, vous pouvez définir error.whitelabel.enabled = false

    devrait être

    Pour le désactiver, vous pouvez définir server.error.whitelabel.enabled = false

    Manuel indique ici que vous devez définir server.error.whitelabel.enabled sur false pour désactiver la page d’erreur standard. Peut-être que c’est ce que tu veux?

    Au fait, je ressens la même erreur après l’ajout / le mappage d’erreur.

    Avec Spring Boot> 1.4.x, vous pouvez le faire:

     @SpringBootApplication(exclude = {ErrorMvcAutoConfiguration.class}) public class MyApi { public static void main(Ssortingng[] args) { SpringApplication.run(App.class, args); } } 

    mais en cas d’exception, le conteneur de servlets affichera sa propre page d’erreur.

    Cela dépend de votre version de démarrage au spring:

    Lorsque SpringBootVersion <= 1.2 utilisez alors error.whitelabel.enabled = false

    Lorsque SpringBootVersion > = 1.3 utilisez alors server.error.whitelabel.enabled = false

    Dans Spring Boot 1.4.1 utilisant des modèles Moustache, placer error.html sous le dossier templates sera suffisant:

         Error   

    Error {{ status }}

    {{ error }}

    {{ message }}

    {{ path }}

    Des variables supplémentaires peuvent être transmises en créant un intercepteur pour /error

    server.error.whitelabel.enabled = false

    Inclure la ligne ci-dessus dans les dossiers de ressources application.properties

    Plus d’erreur Résolution du problème, reportez-vous à http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whitelabel-error-page

    J’essayais d’appeler un point d’extrémité REST à partir d’un microservice et j’utilisais la méthode put de resttemplate.

    Dans ma conception, si une erreur se produisait dans le sharepoint terminaison REST, elle devrait renvoyer une réponse d’erreur JSON, elle fonctionnait pour certains appels, mais pas pour cette réponse, elle renvoyait plutôt la page d’erreur de marque blanche .

    J’ai donc fait des recherches et j’ai découvert cela;

    Spring essayez 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 de label blanc HTML.

    En conséquence: mon application client devait dire au noeud final REST que l’appelant était une machine, et non un navigateur. Pour cela, l’application client devait append explicitement ‘ application / json ‘ dans l’en-tête ACCEPT pour la méthode ‘put’ de resttemplate. J’ai ajouté ceci à l’en-tête et résolu le problème.

    mon appel au noeud final:

     restTemplate.put(url, request, param1, param2); 

    pour l’appel ci-dessus, j’ai dû append le paramètre d’en-tête ci-dessous.

     headers.set("Accept", MediaType.APPLICATION_JSON_UTF8_VALUE); 

    ou j’ai essayé de changer de mise aussi pour échanger, dans ce cas, échange appel a ajouté le même en-tête pour moi et a résolu le problème aussi mais je ne sais pas pourquoi 🙂

     restTemplate.exchange(....)