Ich versuche, die White-Label-Fehlerseite zu entfernen. Ich habe also eine Controller-Zuordnung für "/ error" erstellt.
@RestController
public class IndexController {
@RequestMapping(value = "/error")
public String error() {
return "Error handling";
}
}
Aber jetzt bekomme ich diesen Fehler.
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
Ich weiß nicht, ob ich etwas falsch mache. Bitte beraten.
BEARBEITEN:
Wurde bereits error.whitelabel.enabled=false
zur Datei application.properties hinzugefügt
und erhält immer noch den gleichen Fehler
spring
spring-boot
Yasitha Waduge
quelle
quelle
spring.resources.add-mappings=false
?/error
Pfad aufgerufen wird?Antworten:
Sie müssen Ihren Code wie folgt ändern:
Ihr Code hat nicht funktioniert, da Spring Boot das automatisch
BasicErrorController
als Spring Bean registriert, wenn Sie keine Implementierung von angegeben habenErrorController
.Um diese Tatsache zu sehen, navigieren Sie einfach
ErrorMvcAutoConfiguration.basicErrorController
hierher .quelle
BasicErrorController
(siehe github.com/spring-projects/spring-boot/blob/… ) verwenden können, um das zu erreichen, was Sie wollenErrorAttributes
Objekt bekommen sollte (das die Fehlerdetails enthält), aber dann habe ich es einfach mit @Autowiring versucht und es funktioniert. Was ich jetzt gemacht habe: gist.github.com/jonikarppinen/662c38fb57a23de61c8bWenn Sie eine "JSONish" -Antwortseite wünschen, können Sie Folgendes ausprobieren:
quelle
Spring Boot Doc 'war' falsch (sie haben es seitdem behoben):
sollte sein
quelle
/error
trotzdem zu. Um den Endpunkt frei/error
Satzserver.error.path=/error-spring
oder einen alternativen Weg.Sie können es vollständig entfernen, indem Sie Folgendes angeben:
Beachten Sie jedoch, dass dies wahrscheinlich dazu führt, dass stattdessen die Whitelabel-Seiten des Servlet-Containers angezeigt werden :)
BEARBEITEN: Eine andere Möglichkeit, dies zu tun, ist über application.yaml. Geben Sie einfach den Wert ein:
Dokumentation
Bei Spring Boot <2.0 befindet sich die Klasse im Paket
org.springframework.boot.autoconfigure.web
.quelle
Handbuch hier sagt , dass Sie setzen müssen ,
server.error.whitelabel.enabled
umfalse
die Standard - Fehlerseite zu deaktivieren. Vielleicht ist es was du willst?Ich habe übrigens den gleichen Fehler nach dem Hinzufügen / Fehler-Mapping.
quelle
/error
trotzdem zu. Um den Endpunkt frei/error
Satzserver.error.path=/error-spring
oder einen alternativen Weg.Mit Spring Boot> 1.4.x können Sie Folgendes tun:
Im Ausnahmefall zeigt der Servlet-Container jedoch eine eigene Fehlerseite an.
quelle
Dies hängt von Ihrer Spring Boot-Version ab:
Wenn SpringBootVersion <=
1.2
dann verwendenerror.whitelabel.enabled = false
Wenn SpringBootVersion > =,
1.3
dann verwenden Sieserver.error.whitelabel.enabled = false
quelle
In Spring Boot 1.4.1 mit Moustache-Vorlagen reicht es aus, error.html im Vorlagenordner abzulegen:
Zusätzliche Variablen können übergeben werden, indem ein Interceptor für erstellt wird
/error
quelle
Hier ist eine alternative Methode, die der "alten Methode" zum Festlegen von Fehlerzuordnungen in sehr ähnlich ist
web.xml
.Fügen Sie dies einfach Ihrer Spring Boot-Konfiguration hinzu:
Anschließend können Sie die Fehlerseiten im statischen Inhalt normal definieren.
@Component
Falls gewünscht, kann der Customizer auch ein separater sein .quelle
Ich verwende Spring Boot Version 2.1.2 und die
errorAttributes.getErrorAttributes()
Signatur hat bei mir nicht funktioniert (in der Antwort von Acohen). Ich wollte eine Antwort vom Typ JSON, also grub ich ein wenig und stellte fest, dass diese Methode genau das tat, was ich brauchte.Ich habe die meisten meiner Informationen aus diesem Thread sowie aus diesem Blog-Beitrag erhalten .
Zuerst habe ich eine erstellt
CustomErrorController
, nach der Spring suchen wird, um Fehler zuzuordnen.Zweitens habe ich eine
CustomHttpErrorResponse
Klasse erstellt, um den Fehler als JSON zurückzugeben.Schließlich musste ich das Whitelabel in der
application.properties
Datei deaktivieren .Dies sollte sogar für
xml
Anfragen / Antworten funktionieren . Aber das habe ich nicht getestet. Es hat genau das getan, wonach ich gesucht habe, seit ich eine RESTful-API erstellt habe und nur JSON zurückgeben wollte.quelle
server.error.whitelabel.enabled = false
Fügen Sie die obige Zeile in die Ressourcenordner application.properties ein
Weitere Informationen zur Fehlerbehebung finden Sie unter http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whitelabel-error-page
quelle
Ich habe versucht, einen REST-Endpunkt von einem Microservice aus aufzurufen, und die put- Methode des Resttemplates verwendet.
Wenn in meinem Entwurf ein Fehler innerhalb des REST-Endpunkts aufgetreten ist, sollte eine JSON-Fehlerantwort zurückgegeben werden. Es funktionierte für einige Aufrufe, aber nicht für diesen Put- Aufruf. Es wurde die White-Label-Fehlerseite zurückgegeben Stattdessen wurde .
Also habe ich Nachforschungen angestellt und das herausgefunden.
Spring versucht, den Aufrufer zu verstehen, wenn es sich um einen Computer handelt, der eine JSON-Antwort zurückgibt, oder wenn es sich um einen Browser handelt, gibt er den HTML- Code der White-Label-Fehlerseite zurück .
Als Ergebnis: Meine Client-App musste dem REST-Endpunkt mitteilen, dass der Aufrufer ein Computer und kein Browser ist. Daher musste die Client-App ' application / json ' explizit für die 'put'-Methode des Resttemplates in den ACCEPT-Header einfügen. Ich habe dies zum Header hinzugefügt und das Problem gelöst.
Mein Anruf beim Endpunkt:
Für den obigen Aufruf musste ich den folgenden Header-Parameter hinzufügen.
oder ich habe versucht, put to exchange ebenfalls zu ändern. In diesem Fall hat der Exchange-Aufruf den gleichen Header für mich hinzugefügt und das Problem ebenfalls gelöst, aber ich weiß nicht warum :)
quelle
Spring Boot verfügt standardmäßig über eine Whitelabel- Fehlerseite, die in einem Browser angezeigt wird, wenn ein Serverfehler auftritt. Die Whitelabel-Fehlerseite ist eine generische Spring Boot-Fehlerseite, die angezeigt wird, wenn keine benutzerdefinierte Fehlerseite gefunden wird.
Setzen Sie "server.error.whitelabel.enabled = false", um die Standardfehlerseite zu wechseln
quelle
Ich hatte ein ähnliches Problem mit der WhiteLabel-Fehlermeldung in meinem Angular SPA, wenn ich eine Aktualisierung durchführte.
Das Update bestand darin, einen Controller zu erstellen, der ErrorController implementiert. Statt jedoch einen String zurückzugeben, musste ich ein ModelAndView-Objekt zurückgeben, das an / weiterleitet
quelle