1
resposta

O message não aparece no Json

O erro está sendo mostrado na console, porém no body não aparece.

@Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        var tokenJWT = recuperarToken(request);

        System.out.println(tokenJWT);

        filterChain.doFilter(request, response);
    }

    private String recuperarToken(HttpServletRequest request) {
        var authorizationHeader = request.getHeader("Authorization");
        if (authorizationHeader == null) {
            throw new RuntimeException("Token JWT não enviado no cabeçalho Authorization!");
        }

        return authorizationHeader.replace("Bearer ", "");
    }
}

O retorno no body está assim:
{
"timestamp": "2026-02-16T14:49:47.992Z",
"status": 500,
"error": "Internal Server Error",
"path": "/login"
}
Mensagem de erro no console:
java.lang.RuntimeException: Token JWT não enviado no cabeçalho Authorization!

1 resposta

Olá Eduardo! Tudo bem?

Quando uma exceção é lançada, como RuntimeException, ela não está sendo tratada para retornar uma mensagem amigável no corpo da resposta JSON. Por padrão, o Spring Boot retorna uma resposta genérica de erro 500 sem detalhes da mensagem.

Isso acontece porque atualmente o Spring Boot definiu que a annotation @ControllerAdvice e a responsável por coletar esses lançamentos de exceção, mas como ela não esta presente ou você não definiu uma configuração global, o erro vem dessa forma.

Isso não atrapalha o desenvolvimento, mas se quiser ver exatamente o que é mostrado em aula, você pode criar um controlador de tratamento de exceções global usando a anotação @ControllerAdvice junto com @ExceptionHandler. Isso permitirá capturar exceções específicas e personalizar a resposta JSON. Aqui está um exemplo de como você pode fazer isso:

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(RuntimeException.class)
    public ResponseEntity<?> handleRuntimeException(RuntimeException ex, WebRequest request) {
        Map<String, Object> body = new LinkedHashMap<>();
        body.put("timestamp", LocalDateTime.now());
        body.put("status", HttpStatus.BAD_REQUEST.value());
        body.put("error", "Bad Request");
        body.put("message", ex.getMessage());
        body.put("path", request.getDescription(false));

        return new ResponseEntity<>(body, HttpStatus.BAD_REQUEST);
    }
}

Com esse código, quando a exceção RuntimeException for lançada, o Spring Boot usará esse manipulador para criar uma resposta JSON personalizada que inclui a mensagem de erro.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.