1
resposta

Retorno do ResponseEntity

    @PostMapping
    public ResponseEntity<TopicoDto> cadastrar(@RequestBody TopicoForm form, UriComponentsBuilder uriBuilder){
        Topico topico = form.toTopico(cursoRepository);
        topicoRepository.save(topico);

        URI uri = uriBuilder.path("/topicos/{id}").buildAndExpand(topico.getId()).toUri();
        return ResponseEntity.created(uri).body(new TopicoDto(topico));
    }

Não entendi o porquê do ResponseEntity retornar um TopicoDto.

Um colega já respondeu esta dúvida no fórum, porém ainda não consegui entender.

É por causa dessa lógica adotada na Aula 02 - Cadastrando Tópicos?

TopicoForm > Dados que chegam do cliente para API

TopicoDto > Dados que saem da api de volta pro cliente

1 resposta

Oi Ayrton,

Para controlar o status code e cabeçalhos da resposta que será devolvida pela API, devemos utilizar a classe ResponseEntity, ao invés de devolver diretamente o DTO.

Quando um método no controller é void ou seu retorno é um DTO, o Spring sempre vai devolver o código HTTP 200, sem cabeçalhos adicionais e sem um corpo na resposta.

Mas no caso do cadastro, a boa prática é devolver o código 201, junto com o cabeçalho Location e também devolver no corpo da resposta uma representanção do recurso que acabou de ser cadastrado na API.

Justamente por isso utilizamos o ResponseEntity, setando nele o código 201(Created), passando o cabeçalho Location(URI) e adicionando no corpo um DTO que representa o Topico recem criado.

Bons estudos!