Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Não consegui entender muito bem o que o URI faz

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

Não entendi muito bem o funcionamento da URI e porque utilizar.

2 respostas
solução!

Oi Rafael,

Quando devolvemos o código 201(created) devemos devolver a URI do recurso que acabou de ser criado.

Embora uma URI nada mais seja do que uma String, no Java existe a classe chamada URI, que serve justamente para representar uma URI.

Para criar uma URI você deve fazer algo como:

URI endereco = new URI("http://localhost:8080/topicos");

Mas o problema de você criar a URI desse jeito é que vai ter que passar o endereço completo(com o http e localhost:8080), e se esse endereço mudar no futuro, você vai precisar alterar esse código.

Para não ter esse problema, o Spring tem a classe URIBuilder, que já pega automaticamente o endereço do servidor, e você só precisa passar o final da URI:

URI endereco = uriBuilder.path("/topicos").toUri();

Mas no nosso caso precisamos passar o id do tópico na URI:

URI endereco = uriBuilder.path("/topicos/" +topico.getId() ).toUri();

Mas para evitar ter que concatenar o id na URI, dá para fazer do jeito que foi mostrado na aula:

URI endereco = uriBuilder.path("/topicos/{id}").buildAndExpand(topico.getId()).toUri();

Ficou mais claro agora?

Bons estudos!

Ficou sim, obrigado pela resposta!