Estoy tratando de eliminar la página de error de etiqueta blanca, así que lo que hice fue crear una asignación de controlador para "/ error",
@RestController
public class IndexController {
@RequestMapping(value = "/error")
public String error() {
return "Error handling";
}
}
Pero ahora recibo este error.
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
No sé si estoy haciendo algo mal. Por favor aconséjame.
EDITAR:
Ya se ha agregado
error.whitelabel.enabled=false
al archivo application.properties, pero sigue obteniendo el mismo error
spring
spring-boot
Yasitha Waduge
fuente
fuente
spring.resources.add-mappings=false
?/error
se llama a la ruta?Respuestas:
Necesita cambiar su código a lo siguiente:
Su código no funcionó, porque Spring Boot lo registra automáticamente
BasicErrorController
como Spring Bean cuando no ha especificado una implementación deErrorController
.Para ver ese hecho solo navega hasta
ErrorMvcAutoConfiguration.basicErrorController
aquí .fuente
BasicErrorController
(consulte github.com/spring-projects/spring-boot/blob/… ) para lograr lo que deseaErrorAttributes
objeto (que contiene los detalles del error), pero luego intenté simplemente @Autowiring y funciona. Lo que elegíSi desea una página de respuesta más "JSONish", puede intentar algo como eso:
fuente
Spring boot doc 'estaba' mal (lo han arreglado desde entonces):
debiera ser
fuente
/error
todos modos. Para liberar el/error
conjunto de puntos finalesserver.error.path=/error-spring
o alguna ruta alternativa.Puede eliminarlo completamente especificando:
Sin embargo, tenga en cuenta que hacerlo probablemente hará que aparezcan las páginas de etiqueta blanca del contenedor de servlet :)
EDITAR: Otra forma de hacerlo es a través de application.yaml. Solo pon el valor:
Documentación
Para Spring Boot <2.0, la clase se encuentra en el paquete
org.springframework.boot.autoconfigure.web
.fuente
Manual de aquí dice que usted tiene que fijar
server.error.whitelabel.enabled
afalse
desactivar la página de error estándar. Tal vez es lo que quieres?Por cierto, estoy experimentando el mismo error después de agregar / mapeo de errores.
fuente
/error
todos modos. Para liberar el/error
conjunto de puntos finalesserver.error.path=/error-spring
o alguna ruta alternativa.Con Spring Boot> 1.4.x puedes hacer esto:
pero luego, en caso de excepción, el contenedor de servlet mostrará su propia página de error.
fuente
Esto depende de su versión de arranque de primavera:
Cuando SpringBootVersion <=
1.2
entonces useerror.whitelabel.enabled = false
Cuando SpringBootVersion > =
1.3
entonces useserver.error.whitelabel.enabled = false
fuente
En Spring Boot 1.4.1 con plantillas de bigote, basta con colocar error.html en la carpeta de plantillas:
Se pueden pasar variables adicionales creando un interceptor para
/error
fuente
Aquí hay un método alternativo que es muy similar a la "forma antigua" de especificar asignaciones de error en
web.xml
.Simplemente agregue esto a su configuración de Spring Boot:
Luego puede definir las páginas de error en el contenido estático normalmente.
El personalizador también puede ser independiente
@Component
, si lo desea.fuente
Estoy usando Spring Boot versión 2.1.2 y la
errorAttributes.getErrorAttributes()
firma no funcionó para mí (en respuesta de acohen). Quería una respuesta tipo JSON, así que investigué un poco y descubrí que este método hacía exactamente lo que necesitaba.Obtuve la mayor parte de mi información de este hilo, así como de esta publicación de blog .
Primero, creé un
CustomErrorController
Spring que buscará para asignar cualquier error.En segundo lugar, creé una
CustomHttpErrorResponse
clase para devolver el error como JSON.Finalmente, tuve que apagar Whitelabel en el
application.properties
archivo.Esto incluso debería funcionar para
xml
solicitudes / respuestas. Pero no he probado eso. Hizo exactamente lo que estaba buscando ya que estaba creando una API RESTful y solo quería devolver JSON.fuente
server.error.whitelabel.enabled = false
Incluya la línea anterior a las carpetas de recursos application.properties
Más resolución de problema de error, consulte http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whitelabel-error-page
fuente
Estaba tratando de llamar a un punto final REST desde un microservicio y estaba usando el método put de resttemplate .
En mi diseño si se ha producido algún error en el interior del RESTO punto final que debe devolver una respuesta de error de JSON, que estaba trabajando para algunas llamadas, pero no para este puesto uno, volvió la página de error de marca blanca en su lugar.
Así que investigué un poco y descubrí eso;
Spring intenta entender a la persona que llama si es una máquina y luego devuelve la respuesta JSON o si se trata de un navegador que devuelve el HTML de la página de error de etiqueta blanca .
Como resultado: mi aplicación cliente necesitaba decirle al punto final REST que la persona que llama es una máquina, no un navegador, por lo que para esto la aplicación cliente necesitaba agregar ' application / json ' en el encabezado ACCEPT explícitamente para el método 'put' de la nueva plantilla. Agregué esto al encabezado y resolví el problema.
mi llamada al punto final:
para la llamada anterior tuve que agregar debajo del parámetro de encabezado.
o traté de cambiar poner a cambio también, en este caso, la llamada de intercambio agregó el mismo encabezado para mí y resolvió el problema también, pero no sé por qué :)
fuente
Spring Boot por defecto tiene una página de error de " etiqueta blanca " que puede ver en un navegador si encuentra un error del servidor. Whitelabel Error Page es una página genérica de error de Spring Boot que se muestra cuando no se encuentra una página de error personalizada.
Establezca "server.error.whitelabel.enabled = false" para cambiar de la página de error predeterminada
fuente
Tenía un mensaje de error WhiteLabel de problema similar en mi Angular SPA cada vez que hacía una actualización.
La solución fue crear un controlador que implemente ErrorController pero en lugar de devolver una Cadena, tuve que devolver un objeto ModelAndView que reenvía a /
fuente