Contents

Como criar páginas de erro personalizadas do Spring Boot com o Thymeleaf

O software apresenta erros. Mesmo as melhores aplicações encontrarão erros em algum momento. Por conseguinte, todas as aplicações devem dispor de alguns mecanismos de tratamento de erros.

O Spring Boot incorpora uma configuração automática para o tratamento de erros que inclui uma página de erro Whitelabel predefinida. No entanto, espera-se que os desenvolvedores gerem sua própria página de erro personalizada para substituir a versão padrão Whitelabel. Este artigo oferece orientação sobre como personalizar a página de erro para uso em aplicativos Spring Boot.

Página de erro Whitelabel do Spring Boot

Ao encontrar um erro em um aplicativo Spring Boot, o sistema solicitará automaticamente o ponto de extremidade “/error”. No caso de este caminho especificado não conter quaisquer vistas ou modelos predefinidos, a página de erro Whitelabel será apresentada como resposta predefinida aos utilizadores.

/pt/images/whitelabel-error-page.jpg

A página de erro de etiqueta branca apresenta o carimbo de data/hora em que ocorreu o lapso, bem como o fuso horário relevante. Além disso, revela a classificação do erro e o seu identificador correspondente. A página de erro de etiqueta branca informa o utilizador de que

A maioria dos dados apresentados na página de erro de etiqueta branca deriva de características de erro específicas. A visualização de erro no Spring Boot possui acesso a uma variedade desses atributos, incluindo, mas não se limitando a:

O termo “erro” refere-se a uma causa ou explicação específica por trás de um desvio não intencional de um resultado desejado, padrão ou expetativa. Denota uma discrepância entre o que se pretendia e o que realmente ocorreu, indicando que há espaço para melhorias na obtenção de um desempenho ótimo ou na consecução de um objetivo.

O carimbo de data/hora refere-se ao ponto específico no tempo em que um erro ocorre, normalmente representado por uma combinação de data e hora.

⭐status: o código de estado do erro.

O nome da classe da exceção raiz, se o erro resultar de uma exceção, serve como um designador para a exceção que ocorre ao mais alto nível na hierarquia de excepções.

O valor associado à chave “message” no dicionário representa a mensagem de exceção, se o erro resultar de uma exceção.

Os erros de validação são constituídos por quaisquer resultados derivados de uma exceção BindingResult, nos casos em que o erro se deve a uma ocorrência excecional.

O traço de exceção refere-se ao registo das chamadas de função que conduzem a um erro, que ocorre quando uma exceção é lançada durante a execução do programa.Esta informação pode ser útil para identificar a origem do problema e depurar o código em conformidade.

O caminho do URL no qual o erro é encontrado pode ser acedido através dos seguintes passos:

Criando uma página de erro com o Thymeleaf

Para gerenciar efetivamente os erros em seu aplicativo Spring Boot, é recomendável designar uma página de erro singular e armazená-la em um modelo específico. O nome do ficheiro do referido modelo pode diferir com base na tecnologia de modelo escolhida; por exemplo, se optar por Java Server Pages (JSP), então o ficheiro seria denominado “error.jsp”.

Incorporando o mecanismo de modelo Thymeleaf, este aplicativo específico do Spring Boot emprega o arquivo error.html como sua base para renderizar modelos. É imperativo manter um padrão consistente, posicionando o modelo de erro dentro da pasta “template”, que reside abaixo do diretório “resources”, juntamente com todos os seus ficheiros de modelo adicionais.

O ficheiro error.html

 <!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
 <head>
     <title> Error</title>
     <link rel="stylesheet" th:href="@{/css/style.css}"/>
 </head>
 <body th:style="'background: url(/images/background1.jpg)
  no-repeat center center fixed;'">
     <div class="container" >
       <h1>An error has occurred...</h1>
       <img th:src="@{/images/error-icon.png}"
        width="100px" height="100px" />
       <p>There seems to be a problem with the page you requested
        (<span th:text="${path}"></span>).</p>
       <p th:text="${'The status code is ' \\+ status
        \\+ ', which means that the page was ' \\+ error \\+ '.'}"></p>
       <p th:text="${'Further details: ' \\+ message \\+ '.'}"></p>
       <a class="btn" href="/home">Back to home</a>
     </div>
 </body>
</html>

A página de erro personalizada tem um objetivo multifacetado. Em primeiro lugar, reconhece a presença de um erro. Em segundo lugar, exibe a solicitação HTTP específica que precipitou o erro. Em terceiro lugar, fornece ao utilizador o código de estado correspondente que acompanha o erro. Caso o utilizador não esteja familiarizado com os códigos de estado, a página esclarece ainda mais o seu significado através do atributo de erro.

A secção final do conteúdo oferece uma notificação ao utilizador no caso de uma ocorrência inesperada. Posteriormente, a hiperligação situada no ponto culminante permite ao utilizador regressar à página web principal navegando até ela. O documento error.html utiliza uma folha de estilo em cascata (CSS) juntamente com dois elementos visuais para construir o seguinte esquema:

/pt/images/customized-error-page.jpg

Mantenha a sua página de erro amigável

O principal objetivo de uma página de erro é transmitir aos utilizadores que ocorreu um determinado erro. No entanto, continua a ser um elemento do próprio software. Por conseguinte, é essencial garantir que a página de erro é fácil de compreender e navegar para os utilizadores.

Uma abordagem alternativa seria utilizar atributos de erro mais simples que transmitam a mensagem de erro de uma forma mais direta. Por exemplo, em vez de utilizar o intrincado atributo trace, pode optar-se pelo atributo path, uma vez que este fornece apenas as informações essenciais necessárias sem entrar em pormenores desnecessários.

É importante não divulgar informações confidenciais sobre os meandros do software a utilizadores desinformados, uma vez que isso pode comprometer a segurança e a integridade do programa.