Inicialização do Spring: página de erro Personalizar Whitelabel

Inicialização do Spring: página de erro Personalizar Whitelabel

1. Visão geral

Neste artigo, veremos comodisable and customize the default error page for a Spring Boot application como o tratamento de erros adequado representa profissionalismo e trabalho de qualidade.

2. Desativando a página de erro de etiqueta branca

Primeiro, vamos ver como podemos desativar a página de erro com etiqueta em branco totalmente, definindo a propriedadeserver.error.whitelabel.enabled parafalse:

server.error.whitelabel.enabled=false

Adicionar esta entrada ao arquivo application.properties desativará a página de erro e mostrará uma página concisa que se origina do contêiner de aplicativo subjacente, por exemplo, Tomcat.

We can achieve the same result by excluding the ErrorMvcAutoConfiguration bean. Podemos fazer isso adicionando esta entrada ao arquivo de propriedades:

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

Ou adicionando esta anotação à classe principal:

@EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class})

Todos os métodos mencionados acima desativarão a página de erro do rótulo branco. Isso nos deixa com a questão de quem realmente lida com o erro?

Bem, como mencionado acima, geralmente é o contêiner de aplicativo subjacente. O bom é que podemos personalizar ainda mais as coisas, mostrando nossas páginas de erro personalizadas em vez de todos os padrões - esse é o foco da próxima seção.

3. Exibindo páginas de erro personalizadas

Primeiro, precisamos criar uma página de erro HTML personalizada.

We’ll save the file as error.html, pois estamos usando o motor stemplateThymeleaf :




Something went wrong!

Our Engineers are on it

Go Home

If we save this file in resources/templates directory, it’ll automatically be picked up peloBasicErrorController do Spring Boot padrão.

É tudo o que precisamos para exibir nossa página de erro personalizada. Com alguns estilos, agora teremos uma página de erro com uma aparência muito mais agradável para nossos usuários:

 

Spring Boot Custom Error Page

Podemos ser mais específicos, nomeando o arquivo com o código de status HTTP que queremos que seja usado, por exemplo. salvar o arquivo como404.html emresources/templates/error significa que ele será usado explicitamente para erros 404.

3.1. UmErrorController personalizado

A limitação até agora é que não podemos executar a lógica personalizada quando ocorrem erros. Para conseguir isso, temos que criar um bean controlador de erro que substituirá o padrão.

Para isso,we have to create a class that implements the ErrorController interfacee substitui seugetErrorPath() para retornar um caminho personalizado para chamar quando ocorrer um erro:

@Controller
public class MyErrorController implements ErrorController  {

    @RequestMapping("/error")
    public String handleError() {
        //do something like logging
        return "error";
    }

    @Override
    public String getErrorPath() {
        return "/error";
    }
}

No fragmento acima, também anotamos a classe com@Controllere criamos um mapeamento para o caminho que é retornado porgetErrorPath(). Dessa forma, o controlador pode lidar com chamadas para o caminho/error.

NohandleError(), retornamos a página de erro personalizada que criamos anteriormente. Se acionarmos um erro 404 agora, é nossa página personalizada que será exibida.

Vamos aprimorar ainda mais ohandleError() para exibir páginas de erro específicas para diferentes tipos de erro.

Por exemplo, podemos ter páginas bem projetadas especificamente para os tipos de erro 404 e 500. Em seguida, podemos usar o código de status HTTP do erro para determinar uma página de erro adequada para exibição:

@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";
}

Então, para um erro 404, por exemplo, veremos a páginaerror-404.html:

image

4. Conclusão

Com essas informações, agora podemos lidar com os erros de maneira mais elegante e mostrar aos nossos usuários uma página estética.

Como sempre, o código-fonte completo está disponívelover on Github.