Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Padronização da Classe GlobalExceptionHandler

Seria uma boa prática o instrutor denominar a classe GlobalExceptionHandler como um DTO ao definir o contrato de resposta da API para erros e exceções?

Pergunto isso porque aprendi que um DTO (Data Transfer Object) é uma classe utilizada exclusivamente para o transporte de dados.

1 resposta
solução!

Não, não seria uma boa prática denominar a classe GlobalExceptionHandler como um DTO. Vamos entender o porquê:O que é um DTO? Um DTO (Data Transfer Object) é um padrão de design usado para encapsular dados e transportá-los entre diferentes partes de um sistema, como entre camadas de uma aplicação ou entre serviços. Ele é uma classe simples que contém apenas atributos e métodos de acesso (getters e setters), sem lógica de negócio. O objetivo principal de um DTO é transferir dados de forma eficiente e estruturada.O que é um GlobalExceptionHandler? Um GlobalExceptionHandler é uma classe usada para capturar e tratar exceções de forma centralizada em uma aplicação, especialmente em APIs. Ele define como a aplicação deve responder a erros e exceções, geralmente retornando uma resposta padronizada em formato JSON, com detalhes como código de status HTTP, mensagem de erro e, possivelmente, outros detalhes relevantes.Por que não chamar o GlobalExceptionHandler de DTO? Propósito diferente: O GlobalExceptionHandler tem o propósito de tratar exceções e definir como a API responde a erros.Um DTO tem o propósito de transportar dados entre camadas ou serviços. Estrutura e comportamento: O GlobalExceptionHandler geralmente contém lógica para capturar exceções, mapeá-las para respostas HTTP e gerar uma estrutura de resposta padronizada.Um DTO é uma estrutura passiva, sem lógica, usada apenas para carregar dados. Boas práticas de nomenclatura: Chamar o GlobalExceptionHandler de DTO pode causar confusão, pois ele não cumpre o papel de um DTO. A nomenclatura deve refletir a responsabilidade da classe. Como definir o contrato de resposta da API para erros?Se você deseja definir um contrato de resposta para erros, pode criar uma classe específica para representar a estrutura da resposta de erro. Essa classe sim pode ser considerada um DTO, pois ela apenas carrega os dados que serão retornados pela API em caso de erro. Exemplo de uma classe de resposta de erro (DTO). public class ErrorResponse { private int status; private String message; private String errorCode; private String timestamp; // Getters e Setters }.No GlobalExceptionHandler, você usaria essa classe para construir a resposta de erro: @ControllerAdvice public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { @ExceptionHandler(Exception.class) public final ResponseEntity handleAllExceptions(Exception ex, WebRequest request) { ErrorResponse errorResponse = new ErrorResponse( HttpStatus.INTERNAL_SERVER_ERROR.value(), ex.getMessage(), "INTERNAL_SERVER_ERROR", LocalDateTime.now().toString() ); return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR); } }.Conclusão O GlobalExceptionHandler não é um DTO, pois sua responsabilidade é tratar exceções, não transportar dados.Use uma classe separada (como ErrorResponse) para definir o contrato de resposta de erro. Essa sim pode ser considerada um DTO.Manter a nomenclatura correta e alinhada com as responsabilidades das classes é essencial para um código claro e de fácil manutenção.