Sim, existem algumas diferenças entre essas duas abordagens.
A primeira abordagem utiliza o UriComponentsBuilder para criar a URI a partir dos componentes fornecidos. Isso permite que você tenha um maior controle sobre os componentes da URI, como o esquema, o host, a porta, os caminhos, os parâmetros de consulta e os fragmentos. Além disso, você pode facilmente adicionar ou remover componentes da URI a qualquer momento antes de criá-la.
A segunda abordagem utiliza o ServletUriComponentsBuilder, que é uma implementação específica para servlets do UriComponentsBuilder. Ela utiliza a solicitação atual do servlet para criar a URI, o que significa que ela irá incluir os componentes da URI da solicitação atual, como o esquema, o host, a porta e os caminhos. Isso pode ser útil se você deseja criar uma URI para uma outra rota da aplicação, mas quer manter os componentes da URI da solicitação atual. Além disso, o ServletUriComponentsBuilder possui métodos convenientes para adicionar novos caminhos e parâmetros de consulta à URI.
Em resumo, a primeira abordagem é mais flexível e permite que você tenha um maior controle sobre os componentes da URI, enquanto a segunda abordagem é mais fácil de usar e é especialmente útil se você deseja criar uma URI para outra rota da aplicação, mas quer manter os componentes da URI da solicitação atual. Qual abordagem é a melhor dependerá das suas necessidades específicas.