ResponseEntity no Spring Boot: quando usar, exemplos e erros comuns

responseentity no spring boot retornando status http e body
Exemplo de uso do ResponseEntity no Spring Boot para retornar status HTTP e corpo da resposta em APIs REST

Resposta rápida: use ResponseEntity no Spring Boot quando você precisar controlar o status HTTP, o corpo da resposta ou os headers de uma API REST. Se o endpoint só devolve um objeto simples e sempre responde com 200 OK, talvez ele nem seja necessário.

O ResponseEntity no Spring Boot é uma das formas mais práticas de deixar suas respostas HTTP mais claras e profissionais. Em vez de retornar apenas um objeto, você define exatamente o que a API devolve: status, body e até headers.

Quando vale a pena usar ResponseEntity?

Na prática, o ResponseEntity faz mais sentido quando a resposta da API depende do contexto da requisição. Isso acontece bastante em APIs REST reais.

  • quando você quer retornar 201 Created ao criar um recurso
  • quando precisa responder com 400 Bad Request em caso de validação
  • quando o recurso não existe e a resposta deve ser 404 Not Found
  • quando você quer enviar headers personalizados
  • quando o endpoint pode retornar corpo vazio com 204 No Content

Se você já viu a diferença entre Controller vs RestController no Spring Boot, o próximo passo natural é entender como devolver respostas mais completas.

O que é ResponseEntity no Spring Boot?

O ResponseEntity é uma classe do Spring que representa uma resposta HTTP completa. Ele permite combinar três partes importantes da resposta:

  • Body: o conteúdo principal retornado pela API
  • Status HTTP: o código da resposta, como 200, 201, 404 ou 500
  • Headers: metadados da resposta, como tipo de conteúdo ou cache

Isso torna o ResponseEntity Spring Boot muito útil em APIs REST, porque o contrato da resposta fica explícito no código.

Exemplo simples de ResponseEntity no Spring Boot

Vamos começar com um caso bem comum: listar usuários.

@GetMapping("/usuarios")
public ResponseEntity<List<String>> listarUsuarios() {
    List<String> usuarios = List.of("Ana", "Carlos", "João");
    return ResponseEntity.ok(usuarios);
}

Nesse exemplo, a API responde com 200 OK e envia a lista no corpo da resposta.

Exemplo real: criação de usuário com status 201

Quando você cria um recurso, o mais correto é retornar 201 Created. Isso melhora a semântica da API e deixa o consumo mais previsível.

@PostMapping("/usuarios")
public ResponseEntity<UsuarioResponse> criarUsuario(@RequestBody UsuarioRequest request) {
    UsuarioResponse response = new UsuarioResponse(1L, request.nome(), request.email());
    return ResponseEntity.status(HttpStatus.CREATED).body(response);
}

Esse padrão é muito usado porque deixa claro que algo novo foi criado, em vez de retornar um simples 200 OK.

Exemplo real: erro de validação com 400 Bad Request

Outro cenário comum é quando a regra de negócio impede o processamento da requisição.

@PostMapping("/pagamentos")
public ResponseEntity<String> criarPagamento(@RequestBody PagamentoRequest request) {
    if (request.valor() <= 0) {
        return ResponseEntity.badRequest().body("O valor do pagamento deve ser maior que zero");
    }

    return ResponseEntity.ok("Pagamento processado com sucesso");
}

Aqui o ResponseEntity ajuda a devolver um erro mais honesto para o cliente da API, sem esconder o problema atrás de um retorno genérico.

Exemplo prático: retornando 404 quando o recurso não existe

Esse é um uso muito comum em aplicações reais.

@GetMapping("/usuarios/{id}")
public ResponseEntity<UsuarioResponse> buscarPorId(@PathVariable Long id) {
    return usuarioService.buscarPorId(id)
            .map(ResponseEntity::ok)
            .orElseGet(() -> ResponseEntity.notFound().build());
}

Esse exemplo mostra bem o valor do ResponseEntity: a API consegue responder com o status correto sem complicar o código.

Bloco prático: padrão útil para APIs REST

Se você quer uma abordagem simples e consistente, este padrão costuma funcionar bem:

@PutMapping("/usuarios/{id}")
public ResponseEntity<UsuarioResponse> atualizarUsuario(@PathVariable Long id,
                                                         @RequestBody UsuarioRequest request) {
    return usuarioService.atualizar(id, request)
            .map(ResponseEntity::ok)
            .orElseGet(() -> ResponseEntity.notFound().build());
}

Esse estilo deixa o código mais legível e reduz a chance de a API devolver respostas incoerentes.

ResponseEntity com headers personalizados

Além do body e do status, você também pode configurar headers quando precisar enviar informações extras.

@GetMapping("/download")
public ResponseEntity<byte[]> baixarArquivo() {
    HttpHeaders headers = new HttpHeaders();
    headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=relatorio.pdf");

    byte[] arquivo = new byte[0];
    return new ResponseEntity<>(arquivo, headers, HttpStatus.OK);
}

Esse recurso é útil em downloads, integrações e qualquer cenário em que a resposta precise carregar metadados adicionais.

Quando não usar ResponseEntity?

Nem todo endpoint precisa de ResponseEntity. Em alguns casos, retornar o objeto diretamente é suficiente.

  • quando o endpoint sempre responde com 200 OK
  • quando não há headers personalizados
  • quando a resposta é extremamente simples

Mesmo assim, em uma api rest spring boot java, o ResponseEntity costuma ser a escolha mais flexível.

Erro comum ao usar ResponseEntity

Um erro frequente é usar ResponseEntity só para “seguir padrão”, sem pensar no comportamento da API. Isso normalmente gera respostas inconsistentes.

Erro comum: retornar 200 OK em situações de falha, como validação inválida ou recurso inexistente. Isso confunde quem consome a API e dificulta o tratamento do erro no front-end ou em outros serviços.

O ideal é escolher o status correto para cada cenário. O body pode até explicar o problema, mas o status HTTP precisa contar a história certa.

ResponseEntity vs retorno direto de objeto

Retorno direto

@GetMapping("/status")
public String status() {
    return "API online";
}

Com ResponseEntity

@GetMapping("/status")
public ResponseEntity<String> status() {
    return ResponseEntity.ok("API online");
}

No segundo caso, o contrato da resposta fica mais claro e fácil de evoluir no futuro.

Status HTTP mais usados com ResponseEntity

Estes são alguns códigos que aparecem com frequência em APIs REST com Spring Boot:

  • 200 OK — requisição concluída com sucesso
  • 201 Created — recurso criado com sucesso
  • 204 No Content — sucesso sem corpo na resposta
  • 400 Bad Request — requisição inválida
  • 401 Unauthorized — autenticação ausente ou inválida
  • 404 Not Found — recurso não encontrado
  • 500 Internal Server Error — erro inesperado no servidor

FAQ sobre ResponseEntity no Spring Boot

ResponseEntity é obrigatório no Spring Boot?

Não. Ele é opcional. Você usa quando precisa controlar melhor a resposta HTTP.

Posso usar ResponseEntity com @RestController?

Sim. Na verdade, essa é uma combinação muito comum em APIs REST com Spring Boot.

ResponseEntity serve só para erros?

Não. Ele também é muito útil para respostas de sucesso, como 200 OK e 201 Created.

Qual a diferença entre retornar um objeto e ResponseEntity?

Retornar um objeto é mais simples, mas ResponseEntity permite controlar status, headers e corpo da resposta com muito mais precisão.

Quando devo preferir ResponseEntity?

Prefira quando a API precisar lidar com diferentes cenários de resposta, como sucesso, erro, ausência de dados ou headers personalizados.

Conteúdos relacionados

Conclusão

O ResponseEntity no Spring Boot é uma ferramenta essencial para quem quer criar APIs REST mais claras, corretas e fáceis de manter.

Ele ajuda a deixar explícito o status HTTP, o corpo da resposta e os headers, o que melhora a comunicação entre backend e consumidor da API.

Próximos passos: se você ainda não domina os códigos de resposta, vale estudar os status HTTP em API REST com Spring Boot e depois aplicar esse conhecimento em controllers reais do seu projeto.

Leitura complementar

Se voce quiser aprofundar esse assunto com um material mais atual, leia tambem Spring boot 422 ou 400 validacao api rest: erros comuns e ajuste.

Referência oficial

Deixe um comentário