Olá, não entendi direito como o BuildAndExpand sabe que o valor o passado tem que substituir justamente na parte do {id}, ele faz uma conexão entre o topico.getId() e o {id}?
URI endereco = uriBuilder.path("/topicos/{id}").buildAndExpand(topico.getId()).toUri();
Obrigado