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.
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.
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!