Spring Boot: Personalizar página de error de etiqueta blanca

1. Información general

En este artículo, veremos cómo deshabilitar y personalizar la página de error predeterminada para una aplicación Spring Boot, ya que el manejo adecuado de errores representa profesionalismo y trabajo de calidad.

2. Inhabilitación de la página de error de etiqueta blanca

Primero, veamos cómo podemos deshabilitar la página de error de etiqueta blanca por completo, estableciendo la propiedad server.error.whitelabel.enabled en false:

server.error.whitelabel.enabled=false

Agregar esta entrada al archivo application.properties desactivará la página de error y mostrará una página concisa que se origina en el contenedor de la aplicación subyacente, por ejemplo, Tomcat.

Podemos lograr el mismo resultado excluyendo el bean ErrorMvcAutoConfiguration . Podemos hacer esto agregando esta entrada al archivo de propiedades:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration #for Spring Boot 2.0 #spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration

O agregando esta anotación a la clase principal:

@EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class})

Todos los métodos mencionados anteriormente deshabilitarán la página de error de etiqueta blanca. Eso nos deja con la pregunta de quién maneja realmente el error.

Bueno, como se mencionó anteriormente, generalmente es el contenedor de la aplicación subyacente. Lo bueno es que podemos personalizar aún más las cosas mostrando nuestras páginas de error personalizadas en lugar de todos los valores predeterminados; este es el enfoque de la siguiente sección.

3. Visualización de páginas de error personalizadas

Primero necesitamos crear una página de error HTML personalizada.

Guardaremos el archivo como error.html ya que estamos usando el motor de plantillas Thymeleaf :

Our Engineers are on it

Go Home

Si guardamos este archivo en recursos / plantillasdirectorio, será recogido automáticamente por el BasicErrorController predeterminado de Spring Boot .

Esto es todo lo que necesitamos para mostrar nuestra página de error personalizada. Con algo de estilo, ahora tendremos una página de error mucho más atractiva para nuestros usuarios:

Podemos ser más específicos al nombrar el archivo con el código de estado HTTP que queremos que se use, por ejemplo, guardar el archivo como 404.html en resources / templates / error significa que se usará explícitamente para errores 404.

3.1. Un controlador de errores personalizado

La limitación hasta ahora es que no podemos ejecutar lógica personalizada cuando ocurren errores. Para lograr eso, tenemos que crear un bean controlador de error que reemplazará al predeterminado.

Para esto, tenemos que crear una clase que implemente la interfaz ErrorController y anule su método getErrorPath () para devolver una ruta personalizada para llamar cuando ocurre un error.

Sin embargo, a partir de la versión 2.3.x, Spring Boot ha desaprobado este método, y la propiedad server.error.path debe usarse en su lugar para especificar la ruta personalizada.

Pero como sigue siendo parte de la interfaz ErrorController y no se ha eliminado por completo, tendremos que anularlo o el compilador se quejará. Para eludir el problema aquí, devolvemos nulo, ya que de todos modos se ignorará:

@Controller public class MyErrorController implements ErrorController { @RequestMapping("/error") public String handleError() { //do something like logging return "error"; } @Override public String getErrorPath() { return null; } }

En el fragmento anterior, también anotamos la clase con @Controller y creamos un mapeo para la ruta que se especifica como la propiedad server.error.path:

server.error.path=/error

De esta forma, el controlador puede manejar las llamadas a la ruta / error .

En handleError () , devolvemos la página de error personalizada que creamos anteriormente. Si activamos un error 404 ahora, se mostrará nuestra página personalizada.

Mejoremos aún más handleError () para mostrar páginas de error específicas para diferentes tipos de error.

Por ejemplo, podemos tener páginas bien diseñadas específicamente para los tipos de error 404 y 500. Luego, podemos usar el código de estado HTTP del error para determinar una página de error adecuada para mostrar:

@RequestMapping("/error") public String handleError(HttpServletRequest request) { Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE); if (status != null) { Integer statusCode = Integer.valueOf(status.toString()); if(statusCode == HttpStatus.NOT_FOUND.value()) { return "error-404"; } else if(statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) { return "error-500"; } } return "error"; }

Luego, para un error 404, por ejemplo, veremos la página error-404.html :

4. Conclusión

Con esta información, podemos ir ahora a manejar los errores de forma más elegante y mostrar a nuestros usuarios una página estética.

Como siempre, el código fuente completo está disponible en Github.